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),…
Three-way seat reconciliation per client per SKU: seats provisioned in a cloud marketplace (Pax8, Sherweb) vs. seats billed in accounting or PSA billing vs. seats actually deployed in the tenant (microsoft-graph or CIPP). Covers the finding class for each pairwise mismatch,
$ npx -y skills add wyre-technology/msp-claude-plugins --skill license-true-up --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/license-true-upContext preview
The summary Claude sees to decide when to auto-load this skill.
Three-way seat reconciliation per client per SKU: seats provisioned in a cloud marketplace (Pax8, Sherweb) vs. seats billed in accounting or PSA billing vs. seats actually deployed in the tenant (microsoft-graph or CIPP). Covers the finding class for each pairwise mismatch,
name: "License True-Up" description: > Three-way seat reconciliation per client per SKU: seats provisioned in a cloud marketplace (Pax8, Sherweb) vs. seats billed in accounting or PSA billing vs. seats actually deployed in the tenant (microsoft-graph or CIPP). Covers the finding class for each pairwise mismatch, disabled users holding paid licenses, intentional-buffer caveats, and how to degrade to a two-way check when an axis isn't connected. when_to_use: >- When checking whether marketplace-purchased seats, billed seats, and actually-deployed seats all agree for a client or across the portfolio. Use when: license true-up, seat reconciliation, unused licenses, unassigned licenses, license waste, license leakage, paying for seats we're not using, billing for more seats than deployed, subscription vs deployed mismatch, seat count audit.
Cloud subscriptions purchased through a distributor (Pax8, Sherweb) are the MSP's real, recurring cost. What the client is billed for that subscription is a separate number set in the accounting system or PSA. What is actually deployed and in active use in the client's tenant is a third number, pulled from M365/Entra directly or via CIPP. These three numbers drift independently and constantly — a new hire gets a mailbox before procurement adds a seat, a termed employee's license sits unassigned for months, a client asks to "add 5 seats" and only the marketplace order gets updated, not the invoice.
This skill teaches a three-way seat reconciliation per client, per SKU: **provisioned** (marketplace) vs. **billed** (accounting/PSA) vs. **deployed** (M365/CIPP actual assignment). Any two of the three disagreeing is a finding; all three disagreeing is usually the highest-dollar problem in the report.
This is a narrower, client/SKU-level version of the four-way reconciliation the `wyre-gateway` plugin's `license-true-up-reconciler` agent performs at portfolio scale (which adds a fourth axis — the PSA *contract* entitlement). Use this skill directly when the question is "are our marketplace seats, invoice, and tenant in agreement" without needing the full contract-entitlement layer; pair it with `agreement-reconciliation` when the contract layer matters too.
client have," "which M365 licenses are unassigned" is a single-axis read; use `pax8-subscriptions`, `cipp-licenses`, or `m365-licensing`. This skill exists for the disagreement *between* those numbers.
reports the gap and its dollar impact, it does not remediate.
| System | Role | Required? | |--------|------|-----------| | Pax8 / Sherweb | Provisioned seat count, unit cost, SKU, renewal/commitment term | Yes (at least one) | | Accounting (QuickBooks Online / Xero) or PSA billing (Autotask/HaloPSA/ConnectWise/Syncro billing items) | Billed seat count and sell price | Yes (at least one) | | Microsoft 365 / Entra (via `microsoft-graph`) or CIPP | Actually assigned/active seat count, per-user license and account status | Optional — strongly recommended when available |
Call `conduit__search_tools` and search for `"subscription"`, `"license"`, `"invoice"`, and `"user"` to see which of Pax8, Sherweb, QBO, Xero, the connected PSA's billing tools, microsoft-graph, and CIPP are actually live for this org. Proceed with whichever combination is available; name explicitly in the output which axes could and could not be checked.
client/company. Extract SKU/product, quantity, unit cost, billing term, commitment/renewal date.
recent billing period, filtered to license/subscription line items for the client.
rather than a direct pass-through invoice) — the PSA's billing-item search tool (e.g. `autotask__search_billing_items`), filtered to the relevant service.
including account enabled/disabled status and last sign-in where available.
assignment, and `cipp__list_users` to cross-reference account status.
Flag any user holding an assigned license while disabled or soft-deleted — these are immediate, no-judgment-call reclaim candidates regardless of what the subscription or invoice says.
For each SKU:
distributor for seats nobody is using. Dollar impact = gap × marketplace unit cost. This is waste the MSP eats unless a buffer policy explains it.
but the client isn't being charged for all of them. Dollar impact = gap × sell price. This is the classic "we're paying for 50 but billing for 45," inverted onto the deployment side — it also covers "we deprovisioned 5 users but never reduced the subscription" once combined with the next case.
version of "paying for 50 seats but billing for 45." Dollar impact = gap × sell price, and separately the MSP may also be over-paying the distributor if deployed seats are lower still.
being charged for seats that don't exis
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…