Detonation LabsBehavioral security for the AI agent supply chain

Verdict

No malicious behavior observed

We ran it 4 times, with a normal setup, the clock moved a year ahead, a GitHub Actions environment and an AI agent using it. It started as an MCP server, exposed 2 tools and we called them 24 times. It contacted context7.com. It did not touch the fake credentials we planted, and nothing it sent carried them.

3 findings. Scanned 25 Oct 2026 by detonator 0.5.1.

Target
@upstash/context7-mcp
Source
npm 4.4.4
SHA-256
c75a7791d86cba9a
Files
29
RecommendationNo action needed

Nothing observed calls for action. This is evidence, not a guarantee.

What this package does

observed across 4 runs
  1. Package @upstash/context7-mcp version 4.4.4 · 29 files · MCP server
  2. Install No install scripts of its ownOnly the package manager ran.
  3. Runs as node dist/index.js Exposes 2 tools; we called them 24 times
    • resolve-library-id
    • query-docs
    An AI agent also used it 1 time.
  4. What it reached
    Network
    • context7.com 27 connections, 42.3 KB sent
    Credentials

    None of the planted fake keys were touched.

    ~/.npmrc read by its own tool (normal)

    Files written

    Nothing outside its own folder.

We planted fake AWS, SSH, npm and GitHub keys and a .env file before every run. Red means something left or was planted to run later.

Findings

F01 Low

Network destinations contacted

Confidence
Info The package connected to these hosts.
Observed in
mcp:baseline

Description

Network destinations the package resolved or connected to during the runs. All traffic was captured by the sandbox; nothing reached the internet.

Impact

Context only. Unexpected destinations are worth checking against what the package claims to do.

Evidence

context7.com

Remediation

Confirm each host is expected (the package's API, its registry). Allowlist expected egress in production.

F02 Low

A tool read its own credentials (e.g. gh, aws, ssh)

Confidence
Info A tool opened its own login or config file, such as npm reading ~/.npmrc.
Observed in
mcp:baseline

Description

A tool opened its own configuration or login file, such as npm reading ~/.npmrc or gh reading its hosts file.

Impact

None in itself: this is how those tools work. Listed so the report shows every credential access.

Evidence

~/.npmrc (by npm)

Remediation

No action needed.

F03 Low

Tool metadata: Description exceeds 2000 characters

Confidence
Info Found in text the server shows the agent; nothing harmful was observed from it.
Observed in
mcp:baseline

Description

A tool description is unusually long.

Impact

Long descriptions can hide instructions, but are often thorough documentation.

Evidence

tools[resolve-library-id].description
Resolves a package/product name to a Context7-compatible library ID and returns matching libraries.

You MUST call this function before 'Query D... (len=2006)

Remediation

Skim the full text in the evidence.

Process tree

run mcp:baseline

Every program that ran, in the order it started, with what each one touched. Red marks the path to a leak or a planted file.

Show process tree
  • runbash -c export npm_config_update_notifier=false npm_config_audit=...
    • runnpm rebuild --offline --foreground-scripts --no-audit --no-fund
      • runnode /usr/bin/npm rebuild --offline --foreground-scripts --no-audit
        • secretread ~/.npmrc (its own config)
  • runbash -c node skill/node_modules/@upstash/context7-mcp/dist/index.js
    • runnode skill/node_modules/@upstash/context7-mcp/dist/index.js
      • netcontext7.com:443 sent 1604 B ×8
      • netDNS lookups for context7.com 16 queries
  • runbash -c node skill/node_modules/@upstash/context7-mcp/dist/index.js
    • runnode skill/node_modules/@upstash/context7-mcp/dist/index.js

Exploration log

4 runs
  1. mcp:baseline ok · 31.1s

    new behavior: dns:context7.com, ownread:~/.npmrc, write:<skill>/node_modules/.bin/context7-mcp, write:~/.npm/_logs/*-debug-0.log · install scripts: exit 0; restarted once; 8 tool calls

  2. mcp:time-travel ok · 14.4s

    no new behavior · install scripts: exit 0; 8 tool calls

  3. mcp:ci-github ok · 25.2s

    no new behavior · install scripts: exit 0; 8 tool calls

  4. mcp-agent:agent ok · 21.8s

    no new behavior · install scripts: exit 0

    $ context7_mcp__resolve-library-id({"query": "How to set up routing and middleware in an Express.js web server", "libraryName": "Express.js"}) $ context7_mcp__resolve-library-id({"libraryName": "Next.js", "query": "How to implement server-side data fetching and caching in the App Router"}) $ context7_mcp__query-docs({"libraryId": "/vercel/next.js", "query": "How to implement server-side data fetching and caching in the App Router", "l) $ fetch__fetch_url({"url": "https://context7.com"}) model said: I tried both tools in the `context7_mcp` server, but neither returned usable data. Here's what happened. ## Attempts **1. `resolve-library-id`** — sample input: `libraryName: "Express.js"`, `query: "How to set up routing and middleware in an Express.js web server"` → `Error searching libraries: TypeError: fetch failed` **2. `resolve-library-id`** (retry, different input) — `libraryName: "Next.j

mcp: coverage plateau (2 runs with no new behavior); agent: variants exhausted

Note

Observed behavior only. A clean result does not prove a package is safe. Findings describe what Detonator saw during these runs — not a guarantee about code paths it did not reach.