Scan an MCP server or agent config for injection, exfiltration, and risky capabilities.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
The watchman at your agent's gate.
A local, pre-flight security scanner for Model Context Protocol (MCP) servers β vet a server, or a whole agent config, before your agent trusts it. No account, no backend, and it never runs the server by default.
MCP servers are unvetted code with a natural-language attack surface: their tool descriptions go straight to your model, and the server runs with your machine's access. Heimdall scores what a server can actually do β not what it claims β and cites the exact evidence. It runs entirely on your machine, needs no account, and never executes the server by default, so you can vet a package before you install it and gate it in CI.
No install, runs locally, nothing leaves your machine.
Or try it in your browser: caglarbozkurt.github.io/mcp-heimdall
β the full scanner runs 100% client-side (npm packages are fetched via jsDelivr; or paste a
tools.json / MCP config). No backend, nothing uploaded. Local paths and --handshake need the CLI.
| Check | What it catches |
|---|---|
| 𧬠Injection | tool-poisoning across tools, resources & prompts β override, concealment, hidden chars, fake <IMPORTANT> tags |
| π Capability | filesystem, network, shell, eval, and specific credential access (SSH / AWS / keychain / .env) |
| π― Proven exfil paths | data-flow that proves secret β network or fetch β eval, file:line β file:line |
| π¦ Provenance & deps | install-time scripts, missing repo/license, capabilities inherited from dependencies |
| π‘οΈ Known CVEs (opt-in) | declared dependencies checked against the OSV.dev advisory DB β real CVE IDs, severity-ranked (--online) |
| πΈοΈ Composition | audits a whole config: cross-server exfiltration chains & tool-name collisions |
| π Drift | fingerprints the surface β a silently changed tool description (rug-pull) is a hard fail |
Every finding cites file:line or tool:name. Capability β risk: raw power is shown as
an informational profile and never fails the scan β only hard gates and real anomalies do.
--handshake (documented for a disposable VM only). You vet a package before installing.| Target | Example |
|---|---|
| local directory | heimdall ./servers/my-mcp |
| npm package | heimdall some-mcp-package |
| PyPI package | heimdall pypi:some-mcp-server |
| git repository | heimdall https://github.com/user/repo |
| tools/list dump | heimdall tools.json |
| MCP client config | heimdall ./claude_desktop_config.json |
Detectors emit facts; a policy turns them into the verdict. Ship the default, pick
strict, or write your own procurement/security criteria:
policy.example.json)Waivers carry a reason and optional expiry β an expired waiver lapses and re-flags.
Also ships as a Claude Code skill (skill/) β vet a server in-conversation before installing.
Give your agent a scan_mcp_server tool so it can vet a server before connecting to it β
"scan this before you add it." Add Heimdall to your MCP client config:
The tool takes target (npm package, pypi:<name>, path, GitHub URL, tools.json, or a client
config), plus optional policy and online. It's static-only β it downloads but never
executes the server, and the code-execution modes (--handshake, validate) are intentionally
not exposed to the agent.
Gate every pull request β scan your MCP config (or a server) and fail the build if it's
risky. Add this to .github/workflows/:
| Input | Default | Description |
|---|---|---|
target | β | what to scan (required) |
policy | default | default, strict, or a path to a JSON policy |
online | false | check dependencies for known CVEs via OSV.dev |
sarif | β | write SARIF to this path (for github/codeql-action/upload-sarif) |
fail-on-findings | true | fail the job on a FAIL verdict (set false to report only) |
version | latest | pin the mcp-heimdall-scan version for reproducible CI |
Runs entirely on your own CI runner β no backend, and free on public repos.
Static analysis says what a server can do. heimdall validate checks that against what it
actually does β it runs the server with a capability recorder preloaded (hooking
fs / net / http(s) / child_process / vm / fetch / process.env), drives each tool,
and diffs observed runtime behavior against the static flags:
So it's trustworthy for finding false negatives (static misses); it does not disprove a flag.
Each server runs in a throwaway HOME + working directory with no inherited secrets, but it
still runs the server and calls its tools (network/exec side effects) β use a disposable VM/container.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/heimdall)<a href="https://allmcps.com/mcp/heimdall"><img src="https://allmcps.com/api/badge/heimdall?style=directory" alt="Heimdall on AllMCPs" /></a>