Skip to main content

MCP Blast-Radius Auditor

AOS audited

See what any MCP server can actually touch — before you add it to your agent.

No manifest? You still get the full blast-radius report. Add a manifest to also catch divergences.

Also, if the server declares a manifest: Catch an MCP server that touches files it said it wouldn't — and block the merge in CI.

Statically extract what a third-party MCP server can reach (files, network, subprocess, env) via surface-level analysis. Compare against declared boundaries when a manifest is present.

Scan scope (default): production package only — excludes tests/, docs/, examples/, scripts/, benchmarks/, .github/, and test_*.py patterns; JSON output includes scan_scope and excluded_file_count. Pass --include-peripheral to scan the full repo.

Try it in 3 steps

① Scan your server in one command

pip install mcp-blast-radius==0.2.5
mcp-blast-radius-gate --gate-mode advisory --target-dir /path/to/your-mcp-server

Point --target-dir at your shipping package root (e.g. src/). Default scope excludes tests, docs, and scripts.

② Read the JSON

Field What it means
gate_pass Scan finished (advisory = report either way; blocking = exit 1 on divergences)
blocking_reasons Lines starting with DIVERGENCE: = declared vs. observed mismatch (if you ship a manifest)
blast_radius Static capability surface (network, subprocess, env, filesystem)
confidence labels declared / observed-static / cannot-determine — static only, upper bounds

Undeclared capability is usually drift, not malice. Treat network/subprocess counts as upper bounds, not confirmed traffic.

③ Apply for an audit badge (optional, opt-in)

Ran a clean scan and want a signed README badge? Open a badge application — paste your command and JSON. Free, 90-day attestation, no phone-home. Criteria: BADGE_CRITERIA.md.


Machine-readable metadata

Example walkthrough

git clone --depth 1 https://github.com/oraios/serena.git /tmp/serena
mcp-blast-radius-gate --gate-mode advisory --target-dir /tmp/serena

Inspect blast_radius and any DIVERGENCE: lines in blocking_reasons.

Report a scan question

Open a GitHub issue with your JSON output (structured template loads automatically).

30-second scan

pip install mcp-blast-radius
mcp-blast-radius-gate --gate-mode blocking --target-dir /path/to/mcp-server

pipx run mcp-blast-radius starts the MCP stdio server (for Claude Desktop / Cursor). For CLI scanning, use mcp-blast-radius-gate as above.

  • Red (blocking): divergence detected — code touches paths or capabilities not declared in manifest.
  • Green: no divergences (or no manifest — blast radius report only, advisory pass).

Install

python3 -m venv .venv
source .venv/bin/activate
pip install .

CLI entry

mcp-blast-radius          # MCP stdio server
mcp-blast-radius-gate     # CI gate (default blocking, exit 1 on fail)

CI blocking gate

mcp-blast-radius-gate --gate-mode blocking --target-dir .
# no divergences → exit 0 / divergences or declaration violations → exit 1

MCP tools

  • aos_compliance_validate — scan one MCP server directory (target_dir required; tool_id optional label)
  • aos_compliance_self_test — wiring smoke test

Default gate_mode=advisory. Use gate_mode=blocking in CI to fail on divergences.

What is extracted

Layer Scope Confidence
Dependencies requirements.txt, pyproject.toml, package.json declared
Python AST imports, file I/O, network, env, subprocess; MCP tool attribution observed-static / cannot-determine
Divergence manifest permitted_output_paths / oracle_paths vs observed access blocking when mismatch

Limitations: Static analysis only. Dynamic imports, getattr/eval, obfuscation, and native extensions may hide capabilities. We do not claim complete coverage — every finding includes a confidence label.

Environment

Variable Purpose
AOS_VALIDATOR_TARGET_DIR Default scan root when target_dir is omitted
AOS_VALIDATOR_MCP_LOG JSONL path for local tool call log (never sent externally)
AOS_VALIDATOR_CALLER Caller label (ci, smoke_self_call, etc.)

Example

aos_compliance_validate target_dir=/path/to/my-mcp-server gate_mode=blocking

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcp_blast_radius-0.2.5.tar.gz (23.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcp_blast_radius-0.2.5-py3-none-any.whl (25.7 kB view details)

Uploaded Python 3

File details

Details for the file mcp_blast_radius-0.2.5.tar.gz.

File metadata

  • Download URL: mcp_blast_radius-0.2.5.tar.gz
  • Upload date:
  • Size: 23.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for mcp_blast_radius-0.2.5.tar.gz
Algorithm Hash digest
SHA256 38e0e2249a63e48ffdc04e444153d7b5be0ea8f4c1f622a1c1c7630b333eb7db
MD5 a0723f9bfe909a90f27142127f5ff786
BLAKE2b-256 6d7a422cc6fb6fbaa96ce451d1c7e85ab02c8380ec0beb3fb6bfdced8e648968

See more details on using hashes here.

File details

Details for the file mcp_blast_radius-0.2.5-py3-none-any.whl.

File metadata

File hashes

Hashes for mcp_blast_radius-0.2.5-py3-none-any.whl
Algorithm Hash digest
SHA256 fba8559147ebe99976e8467342549f8e76a9fa63fa60c825b33ba1c27674fb1f
MD5 f7c945e9579c18e4baf767ebc1782261
BLAKE2b-256 c74218e41cc40b22e27022128abcd164f9edfb8cb62c27510c96921a447ab52e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page