find-contact
CommandResolve a 3CX contact or extension by email, extension, or name
Audit MFA enrollment across all M365 users, highlighting accounts with no MFA
$ npx -y skills add wyre-ai/msp-claude-plugins --agent claude-code
description: Audit MFA enrollment across all M365 users, highlighting accounts with no MFA argument-hint: "[filter] [export]" arguments: [filter, export]
Audit Microsoft 365 MFA enrollment for all users, producing a prioritized list of accounts that need attention.
The Conduit `m365` connector has no user, licence or MFA tools, so this command runs on the `cipp` and `microsoft-graph` connectors. The Graph requests further down show what each step reads; through Conduit, send a read as `microsoft_graph_get` with that path as `relativeUrl` (call `microsoft_graph_suggest_queries` first if unsure of the query), and perform writes through the CIPP tool named for that step.
| Step | Tool | Tier | |------|------|------| | MFA registration for every user | `cipp_list_mfa_users` (`tenantFilter`; pass `"allTenants"` as its value for the fleet) | admin | | Registration-details report (alternative) | `microsoft_graph_get` on `/v1.0/reports/authenticationMethods/userRegistrationDetails` | admin | | Conditional Access coverage | `cipp_list_conditional_access_policies` | admin |
1. **Pull MFA registration** (one call per tenant)
GET /v1.0/reports/authenticationMethods/userRegistrationDetails?$select=userPrincipalName,isMfaRegistered,isMfaCapable,methodsRegistered,isAdmin
2. **Categorize users**
3. **Apply filter if specified**
4. **Sort output**: no-MFA users first, then by last sign-in (most active risks first)
M365 MFA Audit — contoso.com Scanned: 47 users | ❌ No MFA: 8 | ⚠️ SMS only: 5 | ✅ Strong MFA: 34 CRITICAL — No MFA Registered (8 users) ───────────────────────────────────────────────────── ❌ bob.jones@contoso.com Last login: 2 hours ago [ACTIVE RISK] ❌ mary.admin@contoso.com Last login: yesterday [ADMIN - URGENT] ❌ sales1@contoso.com Last login: 3 days ago ❌ contractor1@contoso.com Last login: 14 days ago ❌ legacy.user@contoso.com Never logged in ... WARNING — SMS/Phone Only (5 users) ───────────────────────────────────────────────────── ⚠️ sarah.m@contoso.com SMS — recommend upgrade to Authenticator app ⚠️ tim.c@contoso.com SMS — recommend upgrade to Authenticator app ✅ Strong MFA — 34 users enrolled with Authenticator, FIDO2, or WHfB Recommendations: 1. 🔴 Enforce MFA immediately for active users with no enrollment 2. 🟡 Upgrade SMS users to Microsoft Authenticator (phishing-resistant) 3. Enable Conditional Access "Require MFA for all users" policy to enforce going forward
/check-mfa-status --filter admin-only Global Administrators (3): ✅ it.admin@contoso.com FIDO2 + Authenticator ❌ ceo@contoso.com ❌ NO MFA — CRITICAL for privileged account ✅ svc.account@contoso.com Authenticator ⚠️ 1 of 3 admins has no MFA — remediate immediately
Error: AuditLog.Read.All permission required for full MFA audit. Alternative: Use individual user lookup for specific accounts: /get-user user@contoso.com
Processing 1,247 users... (may take 30-60 seconds due to Graph pagination)
One command to supercharge Claude Code for MSP workflows. Then restart Claude Code. That's it. Documentation: mcp.wyre.ai
Resolve a 3CX contact or extension by email, extension, or name
Snapshot of 3CX queue staffing and active call load
Review and triage abuse mailbox cases in Abnormal Security
Search for specific threat patterns in Abnormal Security by sender, recipient, attack type, or keywords
Triage recent email threats detected by Abnormal Security by severity and attack type
Implement tasks incrementally — build, test, verify, commit. Add "auto" to run the whole plan in one approved pass.