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…
ConnectWise PSA company/account management: company types, statuses, sites/locations, custom fields, and company relationships. Essential for MSP account management and CRM operations in ConnectWise PSA.
Claude Code
$ npx -y skills add wyre-ai/msp-claude-plugins --skill companies --agent claude-code
Codex
$ npx skills add wyre-ai/msp-claude-plugins --skill companies -a codex -y
Cursor
$ npx skills add wyre-ai/msp-claude-plugins --skill companies -a cursor -y
Gemini CLI
$ npx skills add wyre-ai/msp-claude-plugins --skill companies -a gemini-cli -y
GitHub Copilot
$ npx skills add wyre-ai/msp-claude-plugins --skill companies -a github-copilot -y
OpenCode
$ npx skills add wyre-ai/msp-claude-plugins --skill companies -a opencode -y
Windsurf
$ npx skills add wyre-ai/msp-claude-plugins --skill companies -a windsurf -y
name: "ConnectWise Manage Companies" description: > ConnectWise PSA company/account management: company types, statuses, sites/locations, custom fields, and company relationships. Essential for MSP account management and CRM operations in ConnectWise PSA. when_to_use: >- When creating, updating, searching, or managing company/account records. Use when: connectwise company, connectwise account, company management, create company connectwise, company site, company location, company type, company status, customer record, client record, or company custom field.
Companies in ConnectWise PSA represent your clients, prospects, vendors, and other business entities. Company records are central to ticketing, agreements, projects, and billing. This skill covers company CRUD operations, types, statuses, sites, and custom fields.
`Client` and keeps its own ID space; a PSA `company/id` never matches an Automate `ClientID`. Use `connectwise-automate-clients`.
portal logins are contact records; use `connectwise-psa-contacts`.
Hudu company is a documentation container and a Pax8 company is the billing account licences are bought against; neither shares an ID with the PSA. Use `hudu-companies` or `pax8-companies`.
Base: /company/companies
Standard company types in ConnectWise PSA:
| Type ID | Name | Description | |---------|------|-------------| | 1 | Client | Active paying customer | | 2 | Prospect | Potential customer | | 3 | Vendor | Supplier or partner | | 4 | Partner | Strategic partner | | 5 | Competitor | Market competitor |
**Note:** Company types are configurable. Query `/company/companies/types` for your instance's types.
Standard company statuses:
| Status ID | Name | Description | Active | |-----------|------|-------------|--------| | 1 | Active | Active company | Yes | | 2 | Inactive | Inactive company | No | | 3 | Not Approved | Pending approval | No |
Query `/company/companies/statuses` for available statuses.
| Field | Type | Required | Description | |-------|------|----------|-------------| | `id` | int | System | Auto-generated unique identifier | | `identifier` | string(25) | Yes | Unique company code (e.g., "ACME") | | `name` | string(50) | Yes | Full company name | | `status` | object | No | `{id: statusId}` | | `type` | object | No | `{id: typeId}` |
| Field | Type | Required | Description | |-------|------|----------|-------------| | `phoneNumber` | string(30) | No | Main phone | | `faxNumber` | string(30) | No | Fax number | | `website` | string(255) | No | Company website URL |
| Field | Type | Required | Description | |-------|------|----------|-------------| | `addressLine1` | string(50) | No | Street address | | `addressLine2` | string(50) | No | Suite/unit | | `city` | string(50) | No | City | | `state` | string(50) | No | State/province | | `zip` | string(12) | No | Postal code | | `country` | object | No | `{id: countryId}` |
| Field | Type | Required | Description | |-------|------|----------|-------------| | `territory` | object | No | `{id: territoryId}` - Sales territory | | `market` | object | No | `{id: marketId}` - Industry/market | | `accountNumber` | string(30) | No | External accounting ID | | `taxIdentifier` | string(25) | No | Tax ID/EIN | | `annualRevenue` | decimal | No | Company annual revenue | | `numberOfEmployees` | int | No | Employee count |
| Field | Type | Required | Description | |-------|------|----------|-------------| | `billingTerms` | object | No | `{id: termsId}` - Payment terms | | `billToCompany` | object | No | `{id: companyId}` - Bill to different company | | `invoiceDeliveryMethod` | object | No | `{id: methodId}` - Email, Mail, etc. | | `invoiceTemplate` | object | No | `{id: templateId}` | | `pricingSchedule` | object | No | `{id: scheduleId}` |
| Field | Type | Required | Description | |-------|------|----------|-------------| | `ownerLevel` | object | No | `{id: levelId}` - Account manager level | | `defaultContact` | object | No | `{id: contactId}` - Primary contact | | `leadSource` | string(50) | No | How lead was acquired | | `leadFlag` | boolean | No | Is this a lead |
| Field | Type | Required | Description | |-------|------|----------|-------------| | `dateAcquired` | date | No | When became customer | | `deletedFlag` | boolean | System | Soft delete status | | `mobileGuid` | guid | System | Mobile app identifier | | `_info` | object | System | Metadata including last updated |
Sites represent physical locations for a company. Each company can have multiple sites.
/company/companies/{companyId}/sites| Field | Type | Required | Description | |-------|------|----------|-------------| | `id` | int | System | Site identifier | | `name` | string(50) | Yes | Site name | | `addressLine1` | string(50) | No | Street address | | `addressLine2` | string(50) | No | Suite/unit | | `city` | string(50) | No | City | | `state` | string(50) | No | State/province | | `zip` | string(12) | No | Postal code | | `country` | object | No | `{id: countryId}` | | `phoneNumber` | string(30) | No | Site phone | | `faxNumber` | string(30) | No | Site fax | | `taxCode` | object | No | `{id: taxCodeId}` | | `defaultFlag` | boolean | No | Is primary site |
POST /company/companies/{companyId}/sites
Content-Type: application/json
{
"name": "Main Office",
"addressLine1": "123 Main Street",
"city":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.