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…
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
Claude Code
$ npx -y skills add wyre-ai/msp-claude-plugins --skill assets --agent claude-code
Codex
$ npx skills add wyre-ai/msp-claude-plugins --skill assets -a codex -y
Cursor
$ npx skills add wyre-ai/msp-claude-plugins --skill assets -a cursor -y
Gemini CLI
$ npx skills add wyre-ai/msp-claude-plugins --skill assets -a gemini-cli -y
GitHub Copilot
$ npx skills add wyre-ai/msp-claude-plugins --skill assets -a github-copilot -y
OpenCode
$ npx skills add wyre-ai/msp-claude-plugins --skill assets -a opencode -y
Windsurf
$ npx skills add wyre-ai/msp-claude-plugins --skill assets -a windsurf -y
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
3CX's native PBX MCP server: the per-PBX endpoint shape (every PBX is its own FQDN and its own OAuth authorization server — there…
3CX's live-operations surface: read-only visibility into active calls, recordings, voicemail, department and queue membership,…
3CX's read-only directory surface: resolving a caller by email or by exact extension, searching the PBX's own phonebooks,…
3CX's system-and-configuration surface: server time, PBX event log and application log search, service status, database schema…
Abnormal Security abuse mailbox cases: user-reported email submissions, case statuses and judgments, the case lifecycle, bulk and…
Abnormal Security message analysis: message retrieval, email header inspection, attachments, sender reputation, delivery context,…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.