find-contact
Resolve a 3CX contact or extension by email, extension, or name
Get an Ironscales AI verdict on a raw email, then act on it with a remediation action
$ npx -y skills add wyre-technology/msp-claude-plugins --agent claude-codeHow it fires
How this command gets triggered: by you, by Claude, or both.
/classify-emailContext preview
What this command does when you run it.
Get an Ironscales AI verdict on a raw email, then act on it with a remediation action
description: Get an Ironscales AI verdict on a raw email, then act on it with a remediation action argument-hint: "<sender> [subject] [body] [incident_id]" arguments: [sender, subject, body, incident_id]
Submit a raw email to Ironscales' AI classifier and get a verdict back, then — separately and deliberately — take a remediation action if the email corresponds to an incident.
**Read this first.** `ironscales_email_classify` is stateless. It POSTs an email you assemble and returns a verdict. It takes **no incident ID**, sets no classification on any incident, and changes no state anywhere. There is no tool on this server that writes a phishing/spam/legitimate verdict onto an existing incident. If you want incident state to change, that is a separate `ironscales_remediation_act` call, and this command will not make it for you without saying so.
This command therefore does two distinct things, and reports them separately:
1. **Analysis** — a verdict on message content. Changes nothing. 2. **Action** — an optional remediation on a named incident. Changes mail delivery.
1. **Confirm authorisation before sending content**
This call ships the customer's message — subject, plain-text body, HTML body, URLs, headers — outbound to Ironscales for analysis. Confirm you are authorised for that tenant before pasting anything in. Pass attachment **metadata only** (`filename`, `content_type`, `size_bytes`); the schema has no field for file contents and you must not invent one.
2. **Assemble the email**
Build the `ironscales_email_classify` payload. `sender` is required; everything else is optional: `subject`, `sender_display_name`, `reply_to`, `body_text`, `body_html`, `headers`, `urls`, `attachments`.
If an `incident_id` was supplied, call `ironscales_incidents_get` first and use the incident to populate what you can — `sender`, `subject`, and whatever else that tenant's payload carries. Do not fabricate fields the incident did not contain.
3. **Classify**
Call `ironscales_email_classify`. The response is a verdict — typically a classification, a confidence score, and threat-type/indicator lists — and nothing else.
Report it as analysis. Do **not** say the incident was classified, resolved, or updated, because none of that happened.
4. **Combine with incident indicators**
Where an `incident_id` was supplied, present the AI verdict alongside the incident's own `threat_indicators`, its `recipient_count` and `recipients` (breadth), and a sender-versus-reply-to comparison if the payload carries a reply-to. A reply-to that diverges from the sender domain is the strongest BEC signal available here.
5. **Decide, then act — as a separate step**
State the recommended action and why, then take it only with the user's agreement. `ironscales_remediation_act` requires `incident_id` and `action`, with an optional `reason` for the audit trail:
| Action | Effect | Reversible? | |---|---|---| | `quarantine` | Moves the message out of inboxes | Yes — can be released | | `delete` | Permanently removes it from **all** mailboxes | **No** — destroys the evidence | | `block_sender` | Blocks that one sender address | Yes, via the blocklist | | `mark_false_positive` | Marks it legitimate and **restores** it to recipients | Reverses containment | | `report_to_microsoft` | Submits the message to Microsoft | **No** — cannot be recalled |
`quarantine` is the default. Use `delete` only on confirmed-malicious mail whose evidence you have already captured. `mark_false_positive` puts the message back in front of its recipients — confirm that is intended before calling it. Leave `notify_users` at `false` unless the customer explicitly asked; that mail cannot be unsent.
6. **Offer follow-up**
| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | sender | string | Yes* | Sender email address — the only required field of `ironscales_email_classify` | | subject | string | No | Email subject line | | body | string | No | Plain-text body, passed as `body_text` | | incident_id | string | No | An Ironscales incident to pull context from and, optionally, remediate afterwards |
\* If `incident_id` is supplied and `sender` is not, take `sender` from the incident.
/classify-email --sender "billing@suspicious-domain.net" --subject "Your invoice is ready"
/classify-email --sender "security@paypa1.com" --subject "Urgent: Verify your account" --body "Click here to confirm your login within 24 hours."
/classify-email --incident_id "inc-10042"
The verdict comes back first. The remediation is a separate, explicit call.
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
Resolve a 3CX contact or extension by email, extension, or name
Search for specific threat patterns in Abnormal Security by sender, recipient, attack type, or keywords
Triage recent email threats detected by Abnormal Security by severity and attack type