Detonation LabsBehavioral security for the AI agent supply chain

API & docs

Detonate a package from code, look up a verdict before you install, or gate your CI on it.

Look up a verdict

Free, no key needed. Returns the latest public report for a package.

curl "https://detonationlabs.com/api/v1/lookup?target=npm:@scope/server-name"

Detonate a package

Targets: npm:<package>[@version], pypi:<package>, clawhub:@owner/skill (an OpenClaw skill on ClawHub; a pasted openclaw skills install @owner/skill command or a clawhub.ai link works too), or a https://github.com/owner/repo URL. Without a key you get a few scans an hour; with a key, a monthly quota.

curl -X POST https://detonationlabs.com/api/v1/scans \
  -H "Authorization: Bearer $DETONATOR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"target": "npm:@scope/server-name", "public": true}'

Upload a private zip (a skill folder or a server):

curl -X POST https://detonationlabs.com/api/v1/scans \
  -H "Authorization: Bearer $DETONATOR_API_KEY" \
  -F [email protected] -F public=false

Both return 202 with a scan id. A package scanned publicly in the last 7 days returns the cached report straight away ("cached": true).

Get the result

curl https://detonationlabs.com/api/v1/scans/<id>
fieldmeaning
statusqueued → running → done or failed
verdictMALICIOUS BEHAVIOR OBSERVED, VULNERABLE (exploitable by others, not hostile itself), SUSPICIOUS, NO MALICIOUS BEHAVIOR OBSERVED or COULD NOT RUN
progressruns finished so far, with their findings
reportthe full report: findings with evidence, observed manifest, every run
report.startupMCP servers: the args, environment variable names (values shown as <fake>) and files we supplied to start it
report.partial_scanset when only the package itself could be installed (dependencies over the size limit)
report_urlthe human-readable report page

Gate CI on it

Fail a build when a dependency or a new MCP server shows malicious behavior:

v=$(curl -s "https://detonationlabs.com/api/v1/lookup?target=npm:$PKG" | python3 -c 'import sys,json; print(json.load(sys.stdin).get("verdict",""))')
[ "$v" = "MALICIOUS BEHAVIOR OBSERVED" ] && { echo "blocked: $PKG"; exit 1; }

Search

curl "https://detonationlabs.com/api/v1/search?q=github&verdict=malicious"

How MCP servers are tested

What a verdict means

Malicious behavior observed: we saw it happen, e.g. a planted credential leaving the sandbox, a persistence write, or an agent tricked into passing secrets (confirmed by a control run). Vulnerable: it did nothing harmful itself, but we proved someone else can make it: our input ran as a command, it left its folder, or its network port answered without a login. Suspicious: risky behavior or manipulative text without observed harm. No malicious behavior observed: nothing bad happened in our runs. That is evidence, not a guarantee: code paths we didn't reach can still hide behavior.

API keys

We're onboarding design partners now. Email [email protected] for a key.