WYRE-AI/msp-claude-plugins/msp-claude-plugins/ironscales/ironscales/skills/api-patterns/SKILL.md
IRONSCALES API Patterns
Ironscales MCP fundamentals: API-key plus company-ID header authentication and the per-tenant scoping that follows from it, the nine tools this server registers and what each one actually changes, offset/limit pagination without a total count, rate-limit behavior, and how API failures surface to the model.
- Source repository stars
- 42
- Declared platforms
- 0
- Static risk flags
- 0
- Last source update
- 2026-08-28
- Source checked
- 2026-08-28
Decision brief
What it does: where it fits
Ironscales MCP fundamentals: API-key plus company-ID header authentication and the per-tenant scoping that follows from it, the nine tools this server registers and what each one actually changes, offset/limit pagination without a total count, rate-limit behavior, and how API failures surface to the model.
Not for
- Tasks that require unconfirmed production actions or broad system permissions.
- Environments where the pinned source and install steps cannot be inspected.
Compatibility matrix
Platform support, with evidence labels
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
Inspect first. Install second.
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/WYRE-AI/msp-claude-plugins --skill "msp-claude-plugins/ironscales/ironscales/skills/api-patterns"Inspect the Agent Skill "IRONSCALES API Patterns" from https://github.com/WYRE-AI/msp-claude-plugins/blob/5005f73ba2f52cd299f58aa6bb79f4e70ae87103/msp-claude-plugins/ironscales/ironscales/skills/api-patterns/SKILL.md at commit 5005f73ba2f52cd299f58aa6bb79f4e70ae87103. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
What the source asks the agent to do
- 01
Connection & Authentication
Ironscales uses a static API key combined with a company ID for authentication. The MCP Gateway injects these via headers on every upstream call to https://appapi.ironscales.com:
Ironscales uses a static API key combined with a company ID for authentication. The MCP Gateway injects these via headers on every upstream call to https://appapi.ironscales.com:Generate credentials at: Ironscales Platform Settings APIEnvironment Variables (self-hosted): - 02
API Key + Company ID
Ironscales uses a static API key combined with a company ID for authentication. The MCP Gateway injects these via headers on every upstream call to https://appapi.ironscales.com:
Ironscales uses a static API key combined with a company ID for authentication. The MCP Gateway injects these via headers on every upstream call to https://appapi.ironscales.com:Generate credentials at: Ironscales Platform Settings APIEnvironment Variables (self-hosted): - 03
Available MCP Tools
This server registers nine tools and no others. Anything not in these tables does not exist.
This server registers nine tools and no others. Anything not in these tables does not exist.The server uses progressive disclosure: it advertises the navigation tools first, and the domain tools become visible once you navigate.ironscalesemailclassify does not classify an incident. It POSTs a raw email you assemble (sender required; subject, bodies, headers, URLs, and attachment metadata optional) to /api/v1/email/classify and returns a verdic… - 04
Navigation
The server uses progressive disclosure: it advertises the navigation tools first, and the domain tools become visible once you navigate.
The server uses progressive disclosure: it advertises the navigation tools first, and the domain tools become visible once you navigate. - 05
Incidents
Review the “Incidents” section in the pinned source before continuing.
Review and apply the “Incidents” source section.
Permission review
Static risk signals and limitations
No configured static risk pattern was detected
This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.
Evidence record
Why each signal appears
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 91/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 42 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Provenance and original SKILL.md
- Repository
- WYRE-AI/msp-claude-plugins
- Skill path
- msp-claude-plugins/ironscales/ironscales/skills/api-patterns/SKILL.md
- Commit
- 5005f73ba2f52cd299f58aa6bb79f4e70ae87103
- License
- Apache-2.0
- Collected
- 2026-08-28
- Default branch
- main
View the original SKILL.md
Ironscales MCP Tools & API Patterns
Overview
The Ironscales MCP server provides AI tool integration with the Ironscales anti-phishing platform. It exposes tools for listing and investigating phishing incidents, asking Ironscales' AI to classify a raw email, taking remediation actions against delivered mail, managing sender allowlists, and reading company-wide phishing statistics. Authentication uses an API key and company ID passed as request headers.
Connection & Authentication
API Key + Company ID
Ironscales uses a static API key combined with a company ID for
authentication. The MCP Gateway injects these via headers on every upstream
call to https://appapi.ironscales.com:
| Header | Description |
|---|---|
X-IronScales-API-Key | Your Ironscales API key |
X-IronScales-Company-ID | Your Ironscales company (tenant) ID |
Generate credentials at: Ironscales Platform > Settings > API
Environment Variables (self-hosted):
export IRONSCALES_API_KEY="your-api-key"
export IRONSCALES_COMPANY_ID="your-company-id"
The Company ID scopes all API requests to a specific tenant. MSPs managing multiple clients require a separate API key and company ID per client. There is no cross-tenant query.
Requests carry a 30-second timeout.
Available MCP Tools
This server registers nine tools and no others. Anything not in these tables does not exist.
Navigation
The server uses progressive disclosure: it advertises the navigation tools first, and the domain tools become visible once you navigate.
| Tool | Description |
|---|---|
ironscales_navigate | Move to a domain: incidents, email, remediation, stats, allowlist |
ironscales_status | Check API connection status and list available domains |
ironscales_back | Return to the domain navigation menu |
Incidents
| Tool | Description |
|---|---|
ironscales_incidents_list | List phishing incidents, filtered by status and/or severity |
ironscales_incidents_get | Get one incident in full by incident_id |
Email Classification
| Tool | Description |
|---|---|
ironscales_email_classify | Submit a raw email to Ironscales AI and get a verdict back. Stateless — see below |
Remediation
| Tool | Description |
|---|---|
ironscales_remediation_act | Take one of five remediation actions against an incident's mail |
Statistics & Reporting
| Tool | Description |
|---|---|
ironscales_stats_company | Company-wide phishing statistics for a period of 7d/30d/90d/1y |
Allowlist Management
| Tool | Description |
|---|---|
ironscales_allowlist_manage | add, remove, or list allowlist entries typed email/domain/ip |
The one tool whose name misleads
ironscales_email_classify does not classify an incident. It POSTs a raw
email you assemble (sender required; subject, bodies, headers, URLs, and
attachment metadata optional) to /api/v1/email/classify and returns a
verdict. It takes no incident ID, writes nothing, and changes no state. The
only tool on this server that changes incident state is
ironscales_remediation_act.
Pagination
ironscales_incidents_list uses offset-based pagination.
- Pass
offset(default0) andlimit(default50, max100). - The tool response does not carry a total count. The server unwraps the vendor's list and returns only the records plus the offset and limit you asked for.
Example tool response shape:
{
"incidents": [ ... ],
"offset": 0,
"limit": 50
}
Pagination workflow:
- Call with
offset=0andlimit=50. - If the returned
incidentsarray is exactlylimitlong, there may be more — call again withoffset=50. - Stop when a page returns fewer than
limitrecords. Do not try to compute the number of pages up front; you have no total to compute it from.
Narrow with status and severity before paging. Those two are the only
filters ironscales_incidents_list accepts — there is no source
parameter, so a user-reported-versus-AI-detected split has to be partitioned
client-side from the records you get back.
Rate Limiting
Ironscales enforces per-endpoint rate limits.
- HTTP 429 responses indicate rate limiting.
- Use exponential backoff before retrying.
- Use
statusandseverityfilters to limit result volumes. - Avoid unnecessary polling.
Error Handling
Upstream HTTP failures do not reach you as a JSON error body. The server
raises them as tool errors whose message is prefixed by category, with the
vendor's message field appended when present.
| Status | Message you will see | Resolution |
|---|---|---|
| 400 | Ironscales API error (HTTP 400): … | Check required parameters and enum values — status, severity, action, operation, entry_type, period |
| 401 | Ironscales authentication failed: … | Verify API key and company ID |
| 403 | Ironscales access forbidden: … | API key lacks permissions for this operation |
| 404 | Ironscales resource not found: … | Incident ID or resource does not exist |
| 429 | Ironscales rate limit exceeded: … | Wait and retry with exponential backoff |
| 5xx | Ironscales API error (HTTP 5xx): … | Retry; contact Ironscales support if persistent |
Two failures are raised by the server itself before any HTTP call:
Ironscales credentials not configured…— neither gateway-scoped nor environment credentials were available.entry_type and value are required for add/remove operations.—ironscales_allowlist_managewas called withoperation=addoroperation=removeand no entry.
A 400 that reads like a rejected enum is usually a value that does not
exist. There is no resolved status, no source filter, no block_domain
or allowlist_sender remediation action.
Best Practices
- Filter with
statusandseverityrather than pulling the whole queue; they are the only server-side filters available. - Page until a short page rather than until a total — no total is returned.
- Verify incident status with
ironscales_incidents_listbefore remediating. A closed incident rejects remediation with an error that reads like a permissions failure. - Treat
ironscales_incidents_getoutput as vendor pass-through. Onlyid,subject,status,severity,sender,created_at,recipients[],recipient_count, andthreat_indicators[]are read and normalised by this server; verify anything else is present before branching on it. - Check
ironscales_stats_companyweekly to track phishing trends. Its payload is vendor pass-through too — inspect the response before writing logic against a field name.
Related Skills
- incidents - Incident lifecycle, remediation, and allowlist management
Frequently asked questions
What to verify before installation and use
What does the IRONSCALES API Patterns source document cover?
Ironscales MCP fundamentals: API-key plus company-ID header authentication and the per-tenant scoping that follows from it, the nine tools this server registers and what each one actually changes, offset/limit pagination without a total count, rate-limit behavior, and how API failures surface to the model.
How do I install IRONSCALES API Patterns?
The source record exposes this install command: npx skills add https://github.com/WYRE-AI/msp-claude-plugins --skill "msp-claude-plugins/ironscales/ironscales/skills/api-patterns". Inspect the command and pinned source before running it.
Alternatives
Compare before choosing
coreyhaines31/marketingskills
ab-testing
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "should I test this," "which version is better," "test two versions," "statistical significance," "how long should I run this test," "growth experiments," "experiment velocity," "experiment backlog," "ICE score," "experimentation program
garrytan/gbrain
bulk-ingestion
End-to-end discipline for turning any large data source (audio libraries, email takeouts, document corpora, chat exports, API dumps) into brain pages at scale. The lifecycle spine: SCHEMA → ACCESS → TRIAL → EVALUATE → IMPROVE → CODIFY → TEST → SKILLIFY → BULK → MONITOR. State is tracked in a durable JSON manifest (see MANIFEST-PATTERN.md) so any crash, session boundary, or subagent fan-out resumes from ground truth instead of memory.
alirezarezvani/claude-skills
app-store-optimization
App Store Optimization (ASO) toolkit for researching keywords, analyzing competitor rankings, generating metadata suggestions, and improving app visibility on Apple App Store and Google Play Store. Use when the user asks about ASO, app store rankings, app metadata, app titles and descriptions, app store listings, app visibility, or mobile app marketing on iOS or Android. Supports keyword research and scoring, competitor keyword analysis, metadata optimization, A/B test planning, launch checklist
dotnet/skills
migrate-vstest-to-mtp
Migrates .NET test projects from VSTest to Microsoft.Testing.Platform (MTP). Use when user asks to "migrate to MTP", "switch from VSTest", "enable Microsoft.Testing.Platform", "use MTP runner", set OutputType=Exe only for test projects in Directory.Build.props, or mentions EnableMSTestRunner, EnableNUnitRunner, or UseMicrosoftTestingPlatformRunner. USE FOR: MTP behavioral differences vs VSTest (exit code 8, zero tests discovered, --ignore-exit-code, TESTINGPLATFORM_EXITCODE_IGNORE); centralizing