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),…
Customer lifecycle (create/edit/delete under the reseller), domain creation with the Pending → Active verification flow and verification_token, domain aliases, moving domains between customers, address discovery, and mail routing via email destinations and email sources.
$ npx -y skills add wyre-technology/msp-claude-plugins --skill customers-and-domains --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/customers-and-domainsContext preview
The summary Claude sees to decide when to auto-load this skill.
Customer lifecycle (create/edit/delete under the reseller), domain creation with the Pending → Active verification flow and verification_token, domain aliases, moving domains between customers, address discovery, and mail routing via email destinations and email sources.
name: "Mailprotector Customers & Domains" description: > Customer lifecycle (create/edit/delete under the reseller), domain creation with the Pending → Active verification flow and verification_token, domain aliases, moving domains between customers, address discovery, and mail routing via email destinations and email sources. when_to_use: >- When creating or managing Mailprotector customers, domains, domain aliases, or mail routing. Use when: mailprotector customer, mailprotector domain, domain verification, verification token, domain alias, move domain, email destination, email source, mailprotector onboarding.
Customers are the client organizations under the MSP's reseller; domains hang off customers and carry the actual mail routing. Onboarding a client is: create the customer, create the domain, verify it, then point mail flow at it (destinations for inbound delivery, sources for outbound authorization).
| Concept | Detail | |---------|--------| | Customer | `{id, name, provider, reseller, created_at, updated_at}` — created with just `name` and contact `email` | | Domain status | `domain_status`: `{id: 1, name: "Pending"}` or `{id: 2, name: "Active"}` | | `verification_token` | Returned on domain create while Pending; `null` once Active | | Domain alias | A domain with `parent` set to the primary domain; goes through its own Pending/verification | | `address_discovery_enabled` | Domain flag; auto-discovers addresses from mail flow (defaults on for new domains) | | Email destination | Where filtered inbound mail is delivered — domain, hostname, or IP, with `priority` ordering | | Email source | An IP authorized to relay outbound mail through Mailprotector |
1. Create: `POST /resellers/{reseller_id}/customers` with `{"name": "...", "email": "contact@..."}` → 201 with the new `id` (tool: `mailprotector_customers_create`). 2. Read: `mailprotector_customers_list` (from the bound reseller) and `mailprotector_customers_get`. 3. Edit: `PUT /customers/{customer_id}` with `name`/`email` (via `mailprotector_execute_tool`). 4. Delete: `DELETE /customers/{customer_id}` — **removes all domains and users under the customer**. Irreversible; confirm explicitly.
1. `POST /customers/{customer_id}/domains` with `{"name": "domain.com"}` (tool: `mailprotector_domains_create`). 2. The response is 201 with `domain_status` **Pending** and a `verification_token`. Mail is **not filtered** for a Pending domain. 3. Surface the `verification_token` to the operator — ownership is proven with it before Mailprotector activates the domain. Re-fetch the domain (`mailprotector_domains_get`) to watch for `domain_status` id 2 (Active) / `verification_token: null`. 4. After activation, add email destinations and sources (below), then repoint MX records.
`POST /domains/{domain_id}/aliases` with `{"name": "domain-alias.com"}`. The alias appears in `GET /domains/{domain_id}/aliases` with `parent` set to the primary domain and its own Pending status + token. Every user under the primary domain automatically accepts mail at the alias domain (user `email_addresses` extend to each alias), so create aliases before bulk-creating users when you want alias addresses generated.
`POST /domains/{domain_id}/move` with `{"customer_id": 16998}` — only within the **same reseller**. User groups, users, and rules travel with the domain. Use this to fix a domain created under the wrong customer instead of delete + recreate (which would destroy users).
with `{"address": "mail.domain.com"}` — address may be a domain, hostname, or IP. `priority` is assigned in creation order (0 first); lower priority is tried first.
`{"address": "192.0.2.1"}` — the IPs allowed to relay outbound.
(`/user_groups/{id}/email_destinations` and `_sources`) for groups that deliver somewhere other than the domain default — the MCP tool takes `scope: domain|user_group`.
domain creation (groups, users, MX cutover) can proceed, but no mail is filtered until the domain is verified. Always report the verification state, and never call an onboarding done while `domain_status` is Pending.
domain move or user-group edits for restructuring.
`address_discovery_enabled` — you cannot rename a domain; create the correct one and move users.
create console logins, but **roles cannot be assigned via the API** — a new manager has an empty `roles` array until someone assigns the role in the console. Listing customer managers excludes reseller-level managers.
`GET /customers/{id}/statements`) are billing history (`amount`, `currency`, `statement_status`, billing/due dates) — read them for reconciliation, not for provisioning state.
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…