
# Heimdall
**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.
[](https://www.npmjs.com/package/mcp-heimdall-scan)
[](https://github.com/caglarbozkurt/mcp-heimdall/actions/workflows/ci.yml)
[](https://www.npmjs.com/package/mcp-heimdall-scan)
[](LICENSE)
[](package.json)
[](https://caglarbozkurt.github.io/mcp-heimdall)
[](https://glama.ai/mcp/servers/caglarbozkurt/mcp-heimdall)
---
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.
## Quickstart
```bash
npx mcp-heimdall-scan firecrawl-mcp # scan a published server
npx mcp-heimdall-scan ./claude_desktop_config.json # audit your whole agent config
npx mcp-heimdall-scan firecrawl-mcp --online # + check its deps for known CVEs (OSV.dev)
npx mcp-heimdall-scan ./my-server --policy strict # gate it in CI
```
No install, runs locally, nothing leaves your machine.
**Or try it in your browser:** [caglarbozkurt.github.io/mcp-heimdall](https://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.
## What it checks
| Check | What it catches |
|---|---|
| 𧬠**Injection** | tool-poisoning across tools, resources & prompts β override, concealment, hidden chars, fake `