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),…
Axcient x360Recover clients: the health_status model, client_code, the three-way protected-system counter breakdown (appliance_based, d2c, cloud_archive), and minting direct-to-cloud agent enrollment tokens.
$ npx -y skills add wyre-technology/msp-claude-plugins --skill clients --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/clientsContext preview
The summary Claude sees to decide when to auto-load this skill.
Axcient x360Recover clients: the health_status model, client_code, the three-way protected-system counter breakdown (appliance_based, d2c, cloud_archive), and minting direct-to-cloud agent enrollment tokens.
name: "Axcient Clients" description: > Axcient x360Recover clients: the health_status model, client_code, the three-way protected-system counter breakdown (appliance_based, d2c, cloud_archive), and minting direct-to-cloud agent enrollment tokens. when_to_use: >- When looking up, listing, or auditing Axcient clients, or enrolling a new direct-to-cloud (D2C) backup agent. Use when: axcient client, client health, protected systems, d2c agent, d2c token, client code, or x360recover client.
A "client" in x360Recover is the tenant/customer boundary — roughly equivalent to a PSA company. Every device, job, vault, and appliance belongs to exactly one client. Client health is a rollup Axcient computes from the devices underneath it, not a value you set.
| Tool | Description | Arguments | |------|-------------|-----------| | `axcient_list_clients` | Every client visible to this credential | `include_appliances?` | | `axcient_get_client` | One client's detail | `client_id`, `include_appliances?` | | `axcient_get_d2c_agent_token` | Mint a D2C agent enrollment token | `client_id`, `vault_id` |
axcient_list_clients
**Example response (one client):**
{
"id": 26,
"name": "Acme Corp",
"client_code": "ACME",
"active": true,
"health_status": "NORMAL",
"devices_counters": {
"appliance_based": [
{ "type": "SERVER", "count": 0 },
{ "type": "WORKSTATION", "count": 4 }
],
"d2c": [
{ "type": "SERVER", "count": 2 },
{ "type": "WORKSTATION", "count": 7 }
],
"cloud_archive": [
{ "type": "SERVER", "count": 2 },
{ "type": "WORKSTATION", "count": 0 }
]
}
}`devices_counters` breaks the client's protected systems into three independent buckets, each split by `SERVER`/`WORKSTATION`:
| Bucket | Meaning | |--------|---------| | `appliance_based` | Backed up to a local Axcient appliance | | `d2c` | Direct-to-cloud — no local appliance, agent replicates straight to Axcient's cloud | | `cloud_archive` | Long-term cloud archive copies |
A device can appear in more than one bucket (e.g. appliance-based **and** cloud-archived via vault replication). Sum the buckets to get a client's total protected-system count; do not assume they're mutually exclusive.
`health_status` is a client-level rollup (values observed: `NORMAL`, and presumably `WARNED`/`CRITICAL` mirroring the device-level status model — see the `devices` skill). It reflects the worst device under that client, not an independently-computed value. To find *which* device is dragging a client's health down, call `axcient_list_devices_by_client` and inspect each device's own `current_health_status`.
axcient_get_d2c_agent_token
Parameters:
Returns short-lived credential material for installing a **new** direct-to-cloud backup agent. This is a provisioning action, not a read — every call issues fresh token material. It does not affect any agent already enrolled, and it cannot be used to recover or inspect an existing agent's credentials.
1. `axcient_list_clients` — scan `health_status` across all clients 2. For any client not `NORMAL`, `axcient_list_devices_by_client` on that `client_id` to find the specific device(s) failing 3. `axcient_get_device` on the failing device(s) for `current_health_status.reason` and timestamps 4. Cross-reference with `axcient_list_jobs_by_device` / `axcient_get_job_history` — a device can be "healthy" by its own status while its most recent job run failed
1. Confirm the target client with `axcient_get_client` 2. Confirm the target vault exists and is reachable with `axcient_get_vault` (see the `vaults` skill — private vaults may have connectivity constraints a cloud vault doesn't) 3. `axcient_get_d2c_agent_token` with that `client_id`/`vault_id` 4. Hand the returned token to whoever is installing the agent — it is not something this tool surface can retrieve again after the fact
**Cause:** Invalid `client_id`, or the client belongs to a different organization than the API key's **Solution:** Verify against `axcient_list_clients`. A non-numeric `client_id` surfaces as a 401, not a 400 — see the `api-patterns` skill.
**Cause:** The API key's account lacks permission to provision new agents **Solution:** This is an admin-gated operation on Axcient's side; the key needs elevated permissions, not a retry.
answer — it tells you *which* client needs attention, not *why*.
UI and reports; surface it alongside `name` when presenting client lists to a technician who already knows the codes.
call provisions real enrollment material. Confirm the client and vault first.
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…