cipp-users — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited cipp-users (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
User management is the highest-volume MSP workflow against CIPP. Every step of the M365 user lifecycle — onboarding, role changes, security incidents, offboarding — has a dedicated tool. Most calls require tenantFilter; resolve it via cipp_list_tenants before you start.
cipp_list_users(tenantFilter='contoso.onmicrosoft.com')
cipp_list_mfa_users(tenantFilter='contoso.onmicrosoft.com')
cipp_list_user_devices(tenantFilter=..., userId='upn-or-objectId')
cipp_list_user_groups(tenantFilter=..., userId='upn-or-objectId')cipp_list_mfa_users is the fastest way to find users without strong auth methods registered. Use it for security posture reviews and for bulk MFA enrollment campaigns.
cipp_create_user(tenantFilter, displayName, userPrincipalName, mailNickname, password,
firstName?, lastName?, jobTitle?, department?, usageLocation?)
cipp_edit_user(tenantFilter, userId, displayName?, jobTitle?, department?, ...)
cipp_disable_user(tenantFilter, userId)usageLocation (ISO 2-letter country code) must be set before any license can be assigned — set it at create time even if licensing comes later.
cipp_reset_password(tenantFilter, userId, password?) # password optional → CIPP generates one
cipp_reset_mfa(tenantFilter, userId) # clears all registered MFA methods
cipp_revoke_sessions(tenantFilter, userId) # invalidates all active tokens
cipp_bec_check(tenantFilter, userId) # BEC investigation reportcipp_bec_check runs a Business Email Compromise investigation: inbox rules, recent sign-in locations, MFA changes, mailbox forwarding rules, suspicious app consents. Always the first call when a user reports a phishing-related compromise — before disabling the account, while session telemetry is still live.
cipp_offboard_user(tenantFilter, userId,
convertToShared?, removeLicenses?,
removeFromGroups?, forwardingAddress?,
outOfOfficeMessage?, ...)This single call wraps the canonical CIPP offboarding sequence: disable, revoke sessions, optional license reclaim, optional shared-mailbox conversion, optional forwarding, optional OOO message, group removal. Prefer this over chaining disable_user + revoke_sessions manually unless you need step-by-step control (in which case use the user-offboarding-runner agent).
cipp_bec_check — capture the forensic snapshot before changing anythingcipp_revoke_sessions — kick the attacker out of all active sessionscipp_reset_password — generate a strong password, share via secure channelcipp_reset_mfa — clear attacker-registered methods; user re-enrollsUse cipp_offboard_user with the org's policy defaults. For high-trust environments, do a dry-run review first:
cipp_list_user_groups — note group memberships (audit trail)cipp_list_user_devices — flag company-owned devices for retrievalcipp_list_mailbox_permissions on the user's mailbox (delegates may exist)cipp_offboard_user with convertToShared=true, removeLicenses=true, forwardingAddress=manager-upnmfa_users = cipp_list_mfa_users(tenantFilter='allTenants')
gaps = [u for u in mfa_users if not u.get('mfaRegistered')]Use this monthly across the portfolio to drive MFA enforcement campaigns.
userId accepts either the Azure AD object GUID or the userPrincipalName. UPN is more readable; GUID is more stable across UPN changes. CIPP returns both — pick one and stay consistent within a workflow.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.