Add AgentArmorHQ in a minute.
Get a free key, paste one command, and every package gets checked against live threat reports before it is installed. Same answer in Claude, Cursor, your terminal, CI and the API.
Quickstart
Three steps. About a minute.
Get a free key
Sign in at agentarmorhq.com/account. Your first key is created for you with the command below already filled in. Free includes 100 checks a month.
Paste one command
Pick where you work. Replace
YOUR_API_KEYwith your key.Ask your assistant
Then try: check this package before installing
Run once in your terminal.
claude mcp add --transport http agentarmor "https://agentarmorhq.com/api/mcp?key=YOUR_API_KEY"Cursor: add to ~/.cursor/mcp.json.
{
"mcpServers": {
"agentarmor": {
"url": "https://agentarmorhq.com/api/mcp?key=YOUR_API_KEY"
}
}
}Claude Desktop: download the bridge once, then add to claude_desktop_config.json.
curl -fsSL https://agentarmorhq.com/api/cli -o ~/agentarmor.mjs{
"mcpServers": {
"agentarmor": {
"command": "node",
"args": [
"/Users/you/agentarmor.mjs",
"mcp"
],
"env": {
"AGENTARMOR_API_KEY": "YOUR_API_KEY"
}
}
}
}Needs Node 18 or newer. Exit code 1 means something was blocked.
export AGENTARMOR_API_KEY=YOUR_API_KEY
curl -fsSL https://agentarmorhq.com/api/cli | node --input-type=module - check axios@1.14.1Save your organization CI token as the AGENTARMOR_ORG_TOKEN secret. The job fails if the pull request adds an AI tool your organization blocks or has not approved. Use a full commit SHA in both uses: lines.
name: AgentArmor
on: [pull_request]
permissions:
contents: read
jobs:
gate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@FULL_COMMIT_SHA
- uses: agentarmorhq/action@bfa0ba334769825920c7c729d6eb3260866774e8 # v1.1.2
with:
org-token: ${{ secrets.AGENTARMOR_ORG_TOKEN }}Send the key as a Bearer token.
curl -H "Authorization: Bearer $AGENTARMOR_API_KEY" \
"https://agentarmorhq.com/api/v1/check?target=npm:axios@1.14.1"Check your whole setup: paste your MCP config on /check. Secrets are removed in your browser first.
What the answers mean
Every check tells you whether to install it right now. The answer is Block, Review, No known issues or Ungraded. Block is the only one that says do not install.
Block
Do not install. The package or version is reported as malicious, or it does not exist.
Review
Look before you install. Pin the version and check the source before you go on. If the lookup did not finish, try again.
No known issues
Nothing reported against it. It is not a promise. Reports change, so check again before you install.
Ungraded
We have no grade for it. The package is not in our AI-tools catalog, so there is no A to F grade. The check still ran.
Real examples
Actual output, generated Oct 24, 2026. Answers change through the day, so run a check for the current one.
AgentArmorHQ Check: axios@1.14.1 (npm:axios)
Decision: BLOCK — Reported compromised in threat research: version 1.14.1 was hijacked. Do not install.
Risk Grade: Not graded yet
Outside Threat Reports: 3 report(s): The State of Open Source Supply Chain Attacks [compromised] (affected versions: 1.14.1, 0.30.4); Malware in axios [malicious] (affected versions: 1.14.1, 0.30.4); Malicious code in axios (npm) [malicious] (affected versions: 0.30.4, 1.14.1)
Registry (npm): latest 1.20.0, first published 4438 days ago, 1 maintainer
Caution: Version 1.14.1 does not exist on npm
Hardened Command: # DO NOT INSTALL axios@1.14.1 — remove immediately if present:
npm uninstall axios
Interactive Check: https://agentarmorhq.com/check?t=npm%3Aaxios
Threat reports checked Oct 24, 2026. Our opinion, not a code audit or security guarantee.AgentArmorHQ Check: imgdecode (npm:imgdecode)
Decision: BLOCK — Reported malicious in threat research: every version of this package should be treated as harmful. Do not install.
Risk Grade: Not graded yet
Outside Threat Reports: 4 report(s): Our code analysis flagged this version [malicious] (affected versions: 1.0.3); MALFEX npm Package 'imgdecode' Hides Shellcode Loader in Windows Native Addon [malicious] (affected versions: 1.0.0, 1.0.1, 1.0.2, 1.0.3); Malicious code in imgdecode (npm) [malicious] (affected versions: 1.0.1, 1.0.0, 1.0.2); Malware in imgdecode [malicious]
Registry (npm): latest 0.0.1-security, first published 1 day ago, 1 maintainer
Caution: New package (published 1 days ago)
Hardened Command: # DO NOT INSTALL imgdecode — remove immediately if present:
npm uninstall imgdecode
Interactive Check: https://agentarmorhq.com/check?t=npm%3Aimgdecode
Threat reports checked Oct 24, 2026. Our opinion, not a code audit or security guarantee.AgentArmorHQ Check: reqeusts-helper (npm:reqeusts-helper)
Decision: BLOCK — This package does not exist on npm. AI assistants sometimes invent package names, and attackers register them later. Do not install; check the spelling.
Risk Grade: Not graded yet
Outside Threat Reports: 0 reports on file
Hardened Command: npm install --ignore-scripts --save-exact "reqeusts-helper"
Interactive Check: https://agentarmorhq.com/check?t=npm%3Areqeusts-helper
Threat reports checked Oct 24, 2026. Our opinion, not a code audit or security guarantee.AgentArmorHQ Check: axios (npm:axios)
Decision: NO KNOWN ISSUES — The latest version, 1.20.0, is not affected. Versions 1.14.1, 0.30.4 were hijacked and reported; never install those. Pin 1.20.0 exactly.
Risk Grade: Not graded yet
Outside Threat Reports: 3 report(s): The State of Open Source Supply Chain Attacks [compromised] (affected versions: 1.14.1, 0.30.4); Malware in axios [malicious] (affected versions: 1.14.1, 0.30.4); Malicious code in axios (npm) [malicious] (affected versions: 0.30.4, 1.14.1)
Registry (npm): latest 1.20.0, first published 4438 days ago, 1 maintainer
Hardened Command: npm install --ignore-scripts --save-exact "axios@1.20.0"
Interactive Check: https://agentarmorhq.com/check?t=npm%3Aaxios
Threat reports checked Oct 24, 2026. Our opinion, not a code audit or security guarantee.A full report tells you what a package can reach on your computer and what it does when it installs: $19 once, or 3 a month on Pro.
MCP tools
The MCP server lives at https://agentarmorhq.com/api/mcp. Your assistant picks the right tool on its own; you can also name one.
| Tool | Input | What it does |
|---|---|---|
check_package | target | Check an npm package, PyPI package, MCP server or GitHub repo before installing. Returns the decision and a hardened install command. |
check_mcp_config | config | Paste a claude_desktop_config.json, .cursor/mcp.json, package.json or a list of packages. Credentials are redacted, every entry is checked, and risky flags and mounts are flagged. |
explain_command | command | Explains in plain English what an install hook or shell command does, including Base64 or hex payloads, before you run it. |
search_skills | query, limit (1 to 20, default 8) | Search the catalog of graded AI skills and MCP servers by keyword. Returns grades, stars, downloads and links. |
account_status | key (optional) | Shows your plan, full reports left and watched-package quota for the connected key. |
CLI
One file, no dependencies, Node 18 or newer. Run it straight from the web:
curl -fsSL https://agentarmorhq.com/api/cli | node --input-type=module - check <target>| Command | What it does |
|---|---|
check <target...> | Check one or more targets: a name, npm:name@version, pypi:name or a GitHub repo URL. |
ci [dir] | Check the dependencies pinned in package.json (exact versions from package-lock.json when present) and requirements.txt. |
config <file> | Inspect an MCP client config. Secrets are redacted on your machine before anything is sent. |
gate [dir] | Check the MCP configs and skills in a repository against your organization policy. Needs an org token (aaci_). |
explain "<command>" | Explain a shell command, including decoded Base64 or hex payloads. |
search <query> | Search graded AI skills and MCP servers. |
status | Show your plan, reports left and usage. |
mcp | Run the stdio bridge that Claude Desktop uses. |
Flags
| Flag | What it does |
|---|---|
--json | Print the raw JSON instead of the text answer. |
--strict | Also exit 1 on grade D or F, or a Review answer. |
--dev | With ci: include devDependencies. |
--policy <file> | With ci or config: use this policy file instead of .agentarmor.yml in the folder. |
--github | With ci or config: print GitHub annotations and write the job summary. |
--key <key> | API key. Or set AGENTARMOR_API_KEY. |
Team policy file
Put .agentarmor.yml (or .agentarmor.json, same keys) in your repo to set your own rules. A name matches with or without npm: or pypi: and with or without a version. An allow entry never overrides a confirmed Block. Only an ignore entry can, and it needs a reason. Unknown keys and missing reasons stop the run with exit code 2, so a typo cannot quietly turn a rule off.
# .agentarmor.yml
block_grades: [D, F] # fail on these grades too
allow: # never fail on a grade for these
- "@modelcontextprotocol/server-filesystem"
ignore: # skip completely; a reason is required
- name: some-package
reason: We use our own patched copy. Tracked in #123.Your organization policy in the pull request check
The setup guides for AgentArmor for Teams are in the Teams docs.
If your team uses AgentArmor for Teams, the same check can read your organization policy. Create a CI token in your organization, save it as a repository secret, and pass it as org-token. The check then reads .mcp.json, .cursor/mcp.json, .vscode/mcp.json, .claude/settings.json, .windsurf/, mcp_config.json and every skill folder in .claude/skills.
- uses: agentarmorhq/action@bfa0ba334769825920c7c729d6eb3260866774e8 # v1.1.2
with:
org-token: ${{ secrets.AGENTARMOR_ORG_TOKEN }}
mode: strict- It fails the job for a blocked item, for a changed pinned version or changed skill files, and, with
mode: strict, for anything the policy does not list. - An item that is still under review gets a warning.
- An item AgentArmor reports as malicious fails even if your organization approved it. Nothing in the repository file clears it, not even an
ignoreentry. - The repository file can only make the rules tighter, unless an admin lists the repository in Settings. A listed repository's
allowlist can allow tools that are not on the organization list. It can never clear a Blocked item. - If the policy cannot be fetched, the job fails with exit code 2.
- The result is sent to your organization: repository, commit, counts and the names of the items that failed.
# .agentarmor.yml
org: acme # your organization's address
block: # always fail, whatever the org says
- "https://mcp.example.net/*"
- some-package
ignore: # clear one failure; a reason is required
- name: some-package
reason: We use our own patched copy. Tracked in #123.Exit codes
| Code | Meaning |
|---|---|
0 | Nothing blocked. |
1 | Something was blocked, or a --strict failure. |
2 | Error: bad usage, network failure, invalid key, quota reached, or the threat-report lookup did not complete. |
API
One endpoint, /api/v1/check. It returns the same answer as the MCP tool, as readable text and as JSON.
Single check
curl -H "Authorization: Bearer $AGENTARMOR_API_KEY" \
"https://agentarmorhq.com/api/v1/check?target=npm:axios@1.14.1"Batch
POST up to 100 targets (each up to 300 characters, body up to 64 KB). Results come back in order; each counts as one check.
curl -X POST https://agentarmorhq.com/api/v1/check \
-H "Authorization: Bearer $AGENTARMOR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"targets":["npm:axios@1.14.1","pypi:requests","github:owner/repo"]}'Authentication and limits
A key is required. Send Authorization: Bearer aa_live_... (or X-AgentArmor-Key). Create one at /account.
| Plan | Checks a month |
|---|---|
| Free | 100 |
| Pro | 2,500 |
| Team | 25,000 |
Every response carries X-Quota-Limit, X-Quota-Remaining and X-Quota-Reset (the next reset, UTC).
| Status | Meaning |
|---|---|
200 | Checked. Look at blocked and decision. |
400 | Bad request: missing or oversized target, or invalid JSON. |
401 | No key, or an invalid or revoked key. |
429 | Monthly limit reached (quota_exceeded) or too many requests in a minute (rate_limited). Honor Retry-After. |
Data sources
We combine public security advisories, malware reports and package signals, updated through the day.
Recommended setups
Ready-to-copy mcp.json files built from well-graded connectors, with install scripts turned off and access scoped narrowly.
Hardened Coding & Repo Stack
Scoped local project folder access, read-first GitHub repository queries, and isolated headless browser testing with install scripts disabled.
- Pins --ignore-scripts on every npx invocation to block postinstall hooks
- Scopes filesystem access to a single workspace folder instead of your home directory
- Runs Playwright in isolated headless mode with no personal browser profile access
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": [
"-y",
"--ignore-scripts",
"@modelcontextprotocol/server-filesystem@2025.7.1",
"/path/to/your-project"
]
},
"github": {
"command": "npx",
"args": [
"-y",
"--ignore-scripts",
"@modelcontextprotocol/server-github@2025.4.8"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_READ_ONLY_PAT}"
}
},
"playwright": {
"command": "npx",
"args": [
"-y",
"--ignore-scripts",
"@playwright/mcp@latest",
"--headless",
"--isolated"
]
}
}
}Read-Only Data & Postgres Stack
Connects your assistant to Postgres or Supabase using a read-only database role and strict query timeouts so prompts cannot alter production tables.
- Uses a read-only connection string with a 5-second statement timeout
- Never exposes a service_role key that bypasses row-level security
- Blocks npm install-time scripts with --ignore-scripts
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": [
"-y",
"--ignore-scripts",
"@modelcontextprotocol/server-postgres@0.6.2",
"postgresql://readonly_user:${DB_PASSWORD}@localhost:5432/analytics_db"
]
},
"memory": {
"command": "npx",
"args": [
"-y",
"--ignore-scripts",
"@modelcontextprotocol/server-memory@2025.4.8"
]
}
}
}Isolated Web Research & Docs Stack
Fetches public documentation and stores session notes without granting access to your personal email, cloud accounts, or private SSH keys.
- Zero cloud or email tokens required
- Keeps local notes inside a dedicated scratch folder
- Disables automatic package install hooks
{
"mcpServers": {
"fetch": {
"command": "npx",
"args": [
"-y",
"--ignore-scripts",
"@modelcontextprotocol/server-fetch@2025.4.8"
]
},
"notes": {
"command": "npx",
"args": [
"-y",
"--ignore-scripts",
"@modelcontextprotocol/server-filesystem@2025.7.1",
"/path/to/research-notes-folder"
]
}
}
}Check before you install.
Free key, one command, 100 checks a month.