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),…
Abnormal Security message analysis: message retrieval, email header inspection, attachments, sender reputation, delivery context, and SPF/DKIM/DMARC authentication results.
$ npx -y skills add wyre-technology/msp-claude-plugins --skill messages --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/messagesContext preview
The summary Claude sees to decide when to auto-load this skill.
Abnormal Security message analysis: message retrieval, email header inspection, attachments, sender reputation, delivery context, and SPF/DKIM/DMARC authentication results.
name: "Abnormal Security Messages" description: > Abnormal Security message analysis: message retrieval, email header inspection, attachments, sender reputation, delivery context, and SPF/DKIM/DMARC authentication results. when_to_use: >- When performing deep analysis or forensics on an individual email message in Abnormal Security. Use when: abnormal message, message analysis, email headers, email attachments, sender reputation, spf dkim dmarc, email authentication, message metadata, email delivery, abnormal email analysis, message inspection, or email forensics.
Abnormal Security provides deep message analysis capabilities beyond basic threat detection. This skill covers message retrieval, header inspection, attachment analysis, sender authentication results, and delivery context. Use it when performing forensic analysis of specific emails or investigating delivery patterns.
messages only as evidence attached to a detected threat. It has no delivery pipeline, no queue, and no bounce record, so "trace this email" questions belong to the gateway: use `Mimecast Message Tracking`.
the remediation surface; use `Abnormal Security Threats`.
can show was already delivered. Pre-delivery holds are `SpamTitan Quarantine` or `Proofpoint Quarantine`.
These are **response** fields describing what Abnormal reports about a message. They are not tool parameters — the only parameters the message tools accept are `threatId` and `messageId`. Availability varies by message and by tenant configuration; treat any single field as best-effort.
| Field | Type | Description | |-------|------|-------------| | `abxMessageId` | string | Abnormal's identifier for the message, as returned in the `abnormal_messages_list` response | | `subject` | string | Email subject line | | `fromAddress` | string | From header email address | | `fromName` | string | From header display name | | `toAddresses` | string[] | All To: recipients | | `ccAddresses` | string[] | All CC: recipients | | `bccAddresses` | string[] | All BCC: recipients (if available) | | `sentTime` | datetime | When the email was sent | | `receivedTime` | datetime | When the email was received by Abnormal | | `internetMessageId` | string | RFC 5322 Message-ID header |
| Field | Type | Description | |-------|------|-------------| | `senderAddress` | string | Envelope sender address | | `senderName` | string | Sender display name | | `senderDomain` | string | Sender domain | | `senderIpAddress` | string | Originating IP address | | `returnPath` | string | Return-Path header (envelope sender) | | `replyToEmails` | string[] | Reply-To header addresses |
| Field | Type | Description | |-------|------|-------------| | `spfResult` | string | SPF check result: pass, fail, softfail, neutral, none | | `dkimResult` | string | DKIM signature result: pass, fail, none | | `dmarcResult` | string | DMARC policy result: pass, fail, none | | `authenticationResults` | string | Full Authentication-Results header |
| Field | Type | Description | |-------|------|-------------| | `attachmentCount` | int | Number of attachments | | `attachmentNames` | string[] | Filenames of attachments | | `attachmentTypes` | string[] | MIME types of attachments | | `attachmentSizes` | int[] | Sizes of attachments in bytes |
| Field | Type | Description | |-------|------|-------------| | `urls` | string[] | All URLs found in message body | | `urlCount` | int | Total number of URLs |
| Field | Type | Description | |-------|------|-------------| | `isRead` | boolean | Whether the recipient has read the email | | `isInternal` | boolean | Whether the email is internal (within org) | | `isExternal` | boolean | Whether the email is from outside the org | | `remediationStatus` | string | Current remediation status |
Two tools, and both are scoped to a single threat. There is no separate headers tool and no tenant-wide message search — you cannot ask "show me every message from this sender". Every message lookup starts from a `threatId`.
| Tool | Description | Parameters | |------|-------------|------------| | `abnormal_messages_list` | List the messages inside one threat case. Returns message IDs and summary data. | `threatId` (required) | | `abnormal_messages_get` | Full analysis of one message: metadata, headers, URLs, attachments, and AI threat analysis — all in a single payload. | `threatId` (required), `messageId` (required) |
`abnormal_messages_get` returns the header set as part of its one response, alongside URLs, attachments and the AI analysis. Everything the *Header Analysis Workflow* below asks for comes out of that single call — there is no second, header-only fetch to make, and nothing to page through. The practical consequence is on the other side: one `abnormal_messages_get` pulls the entire substance of a customer's email into context, including recipient addresses and `Authentication-Results`, whether or not you needed the headers. Call it when you intend to do forensics on that message, not to browse.
`threatId` is a **UUID string**. `messageId` is the message identifier from the `abnormal_messages_list` response (URL-encoded when sent). Do not confuse either with `caseId`, which `abnormal_cases_get` takes as a **number**.
**List messages associated with a threat:**
{
"tool": "abnormal_messages_list",
"parameters": {
"threatId": "184def76-3c28-4e1b-9ef0-a5abc123def4"
}
}
``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 threat detection: threat types (BEC, phishing, malware, socially-engineered attacks, spam, graymail, credential theft), attack vectors,…