api-patterns
3CX's native PBX MCP server: the per-PBX endpoint shape (every PBX is its own FQDN and its own OAuth authorization server — there is no shared mcp.3cx.com),…
CIPP's own operational layer rather than the tenants it manages: GDAP role definitions and pending invites, the CIPP scheduler, and the ping/version/log endpoints used to diagnose why other CIPP tools fail silently.
$ npx -y skills add wyre-technology/msp-claude-plugins --skill ops --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/opsContext preview
The summary Claude sees to decide when to auto-load this skill.
CIPP's own operational layer rather than the tenants it manages: GDAP role definitions and pending invites, the CIPP scheduler, and the ping/version/log endpoints used to diagnose why other CIPP tools fail silently.
name: "cipp-ops" description: "CIPP's own operational layer rather than the tenants it manages: GDAP role definitions and pending invites, the CIPP scheduler, and the ping/version/log endpoints used to diagnose why other CIPP tools fail silently." when_to_use: >- When checking GDAP delegation status, managing scheduled CIPP tasks, verifying CIPP server health, or reading CIPP application logs. Use when: gdap, granular delegated admin, delegated admin, cipp scheduled, schedule task cipp, cipp ping, cipp version, cipp logs, or cipp health.
The meta-layer — tools for managing CIPP itself rather than the tenants it manages. GDAP for the delegation chain, scheduler for recurring jobs, and health/version/log endpoints for verifying CIPP is reachable and functioning.
is CIPP's own application log, not the M365 unified audit log. The near-identically named `cipp_list_audit_logs` lives in `cipp-alerts`; loading the wrong one is the most common CIPP mis-route.
*partner* may delegate, a different object from the roles a tenant's own users hold; use `inforcer-identity-governance` or the `m365` plugin.
on a recurrence, but the on-demand call is `cipp_run_standards_check` in `cipp-standards`.
cipp_list_gdap_roles()
Returns the GDAP (Granular Delegated Admin Privileges) role definitions available — the AAD roles your CSP relationship can grant to your MSP technicians per-tenant.
cipp_list_gdap_invites()
Returns pending GDAP relationship invites that customers have not yet accepted. Stale invites > 14 days are usually customers who lost the email — re-send via the CIPP UI.
GDAP is the modern replacement for AOBO/DAP. Each invite grants the MSP partner tenant a specific set of AAD roles in the customer tenant for a fixed duration. CIPP relies on active GDAP relationships for nearly every multi-tenant operation; broken GDAP = silent failures across the rest of the toolkit.
cipp_list_scheduled_items()
Lists CIPP's scheduled tasks: recurring standards checks, BPA refreshes, alert evaluations, custom user-defined schedules.
cipp_add_scheduled_item(name, command, parameters?, recurrence?, scheduledTime?)
Creates a new scheduled task in CIPP. Use cases:
Pick `recurrence` deliberately — CIPP doesn't dedupe scheduled items, so re-running this tool with the same name creates a duplicate.
cipp_ping()
Liveness probe for the CIPP API. Returns immediately if CIPP is reachable. First call when troubleshooting "tools aren't working" — separates "MCP can't reach CIPP" from "CIPP can't reach Microsoft."
cipp_get_version()
Returns the deployed CIPP version (frontend + backend). Useful when reporting an issue to CIPP maintainers or comparing against the [release notes](https://github.com/KelvinTegelaar/CIPP/releases) for known regressions.
cipp_list_logs(severity?, count?)
Application logs from the CIPP backend. Use for diagnosing failed background jobs, GDAP errors, or rate-limit hits against the Graph API.
ping = cipp_ping() version = cipp_get_version() gdap_invites = cipp_list_gdap_invites()
If any are unhealthy, halt the bulk operation. Bulk standards deployments or user creation against a CIPP with stale GDAP will silently fail or partially apply.
Run weekly:
1. `cipp_list_gdap_invites` — chase pending > 14 days 2. Compare `cipp_list_tenants` against expected onboarded list — gaps usually mean revoked GDAP 3. `cipp_list_gdap_roles` — verify the MSP role template hasn't been altered (drift here breaks fine-grained access)
When any other CIPP tool returns an error:
1. `cipp_ping` — is CIPP reachable at all? 2. `cipp_get_version` — is it the version you think it is? 3. `cipp_list_logs(severity='error', count=50)` — what does CIPP itself report? 4. Check `cipp_list_gdap_invites` and the affected tenant in `cipp_list_tenants` — broken GDAP is the #1 cause of partial failures.
One command to supercharge Claude Code for MSP workflows. Then restart Claude Code. That's it. Documentation: mcp.wyre.ai
Repo: wyre-technology/msp-claude-plugins
3CX's native PBX MCP server: the per-PBX endpoint shape (every PBX is its own FQDN and its own OAuth authorization server — there is no shared mcp.3cx.com),…
3CX's live-operations surface: read-only visibility into active calls, recordings, voicemail, department and queue membership, and forwarding/presence…
3CX's read-only directory surface: resolving a caller by email or by exact extension, searching the PBX's own phonebooks, searching contacts synced from an…
3CX's system-and-configuration surface: server time, PBX event log and application log search, service status, database schema and the read-only SELECT-only…
Abnormal Security abuse mailbox cases: user-reported email submissions, case statuses and judgments, the case lifecycle, bulk and remediation actions, and…
Abnormal Security message analysis: message retrieval, email header inspection, attachments, sender reputation, delivery context, and SPF/DKIM/DMARC…