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),…
HaloPSA asset/CMDB data model: asset (configuration item) fields, device types and statuses, links to clients, sites, users, tickets, and contracts, plus parent-child asset relationships. Covers the Asset API surface, hardware lifecycle workflows, RMM auto-sync and device
$ npx -y skills add wyre-technology/msp-claude-plugins --skill assets --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/assetsContext preview
The summary Claude sees to decide when to auto-load this skill.
HaloPSA asset/CMDB data model: asset (configuration item) fields, device types and statuses, links to clients, sites, users, tickets, and contracts, plus parent-child asset relationships. Covers the Asset API surface, hardware lifecycle workflows, RMM auto-sync and device
name: "HaloPSA Assets" description: > HaloPSA asset/CMDB data model: asset (configuration item) fields, device types and statuses, links to clients, sites, users, tickets, and contracts, plus parent-child asset relationships. Covers the Asset API surface, hardware lifecycle workflows, RMM auto-sync and device matching, and validation errors. when_to_use: >- When tracking devices, managing configuration items, hardware lifecycle, and asset relationships in HaloPSA. Use when: halopsa asset, halo asset, configuration item halopsa, ci halopsa, device management halo, hardware tracking halopsa, halopsa cmdb, asset lifecycle, halo inventory, or halopsa device.
Assets (also called Configuration Items or CIs) in HaloPSA represent managed devices, software, and other trackable items. Effective asset management is crucial for MSPs to track what's deployed at client sites, manage hardware lifecycle, and link service tickets to affected equipment.
A HaloPSA asset is the PSA's **record** of a device — what you believe is deployed, and what it is billed and contracted under. It is not the device's live state.
is the RMM's answer, not the PSA's; use `datto-rmm-devices` or the equivalent device skill for your RMM. The two routinely disagree, and the PSA is the one that goes stale.
`scalepad-lifecycle-manager`; Halo's warranty fields are a local copy that drifts.
configuration notes are `hudu-assets` or `itglue-configurations`.
billing are `halopsa-contracts`; the client and site it belongs to are `halopsa-clients`.
An asset is always owned by a client and optionally placed at a site, assigned to a user, and covered by a contract:
| Link field | Points to | Notes | |------------|-----------|-------| | `client_id` | Client | Required | | `site_id` | Site | Physical location | | `user_id` | User (contact) | Assigned end user | | `contract_id` | Contract | Billing/coverage | | `parent_id` | Asset | Parent-child (e.g. host and its VMs) |
Most-used asset fields: `devicename` (required), `serialnumber`, `assettag`, `macaddress`, `ipaddress`, `manufacturer`, `model`, `operatingsystem`, `devicetype_id`, `status_id`, `purchasedate`, `purchaseprice`, `warrantyexpires`, `lastauditdate`, `inactive`.
`devicetype_id` and `status_id` are **configurable per instance** — the shipped IDs (1 Workstation, 2 Server, ... / 1 Active, 2 Spare, 3 In Repair, 4 Retired, 5 On Order, 6 Lost/Stolen) are defaults only. Query `/api/AssetType` and `/api/AssetStatus` for the actual values before hard-coding any ID.
See [references/fields.md](references/fields.md) for the complete field reference plus the default asset type and status tables.
is present and updates when `id` is supplied. There is no `PUT`/`PATCH`.
bulk-update many assets in a single request.
`warrantyexpires_before=2024-06-30&warrantyexpires_after=2024-01-01`.
See [references/api.md](references/api.md) for full request/response examples covering create, search, update, bulk update, ticket/asset linking, and reports.
HaloPSA integrates with RMM tools to auto-sync assets.
When integrated with an RMM, these fields typically auto-populate and will be overwritten on the next sync — do not hand-edit them:
RMM sync must resolve to an existing asset or it will create duplicates. Match in this order of confidence: RMM device ID (`ncentral_device_id`, `datto_device_id`, `connectwise_device_id`) → serial number → hostname scoped to the client. Hostname alone is not unique across clients.
See [references/examples.md](references/examples.md) for a `matchOrCreateAsset` implementation.
1. **Create asset as "On Order"** (`status_id` for On Order, plus `client_id`) 2. **Receive and configure**
3. **Deploy to user**
1. **Identify aging assets**
GET /api/Asset?purchasedate_before=2020-01-01&inactive=false
2. **Generate refresh report**
3. **Plan replacement**
1. **Find expiring warranties**
GET /api/Asset?warrantyexpires_before=2024-06-30&warrantyexpires_after=2024-01-01
2. **Generate renewal quotes** 3. **Update warranty dates after renewal**
Compare RMM inventory against PSA records and flag assets missing warranty dates, missing serials, or running an out-of-support OS. See [references/examples.md](references/examples.md) for an `auditClientAssets` implementation and an asset-value-by-client roll-up.
| Code | Message | Resolution | |------|---------|------------| | 400 | devicename required | Asset must have a name | | 400 | client_id required | Asset must be link
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…