A transparent proxy for MCP servers that intercepts JSON-RPC, measures latency, stores traces, and enforces access policies.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent โ or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag โ we're steadily working through the catalog.
๐ก Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Inspect callable tools, capabilities, and parameters exposed to AI agents by Heimdall MCP.
Transparent proxy for any MCP server. Intercepts all JSON-RPC messages, measures latency, stores traces in a configurable database, and enforces per-server allow/deny policies โ without touching the original server.
Visit the website to view a full explanation, examples, and other tools!
The proxy always exposes stdio to the MCP client and speaks the correct transport to the real server. Every request/response pair is converted into a span with timing, attributes, and the input/output body.
Drop a heimdall.config.ts in your project root and define exactly which tools, prompts, and resources each MCP server is allowed to expose to the agent โ at the proxy layer, without touching the server code.
| Scope | Path | Purpose |
|---|---|---|
| Local | {project-root}/heimdall.config.{ts,js,mjs,cjs,json} | Per-repo rules |
| Global | ~/.config/heimdall/heimdall.config.{ts,js,mjs,cjs,json} | User/org-wide rules |
Both are optional. If neither exists, the proxy stays fully transparent (backward compatible).
TypeScript configs are loaded via jiti without pre-compilation. Also works as .js, .mjs, .cjs, or .json.
When both local and global configs exist, they merge with security-first semantics:
| Rule | Behavior |
|---|---|
| Deny โ union | Denied by either = denied. Global deny cannot be overridden locally. |
| Allow โ intersection | Must pass both. * or [] means "defer to the other side." |
| Deny beats allow | Within any single config, deny always wins. |
The global config enforces a floor the team can't accidentally loosen. Local configs can only add more restrictions, never fewer.
toolPolicies adds a second enforcement layer on top of name-level tools rules. Instead of just deciding which tools are callable, you can constrain what arguments are allowed on each call.
ArgConstraint fields| Field | Type | Default | Description |
|---|---|---|---|
isPath | boolean | false | Enables path-aware matching (containment check) instead of regex |
allow_pattern | string | string[] | โ | Arg must match at least one pattern to pass |
deny_pattern | string | string[] | โ | Arg is blocked if it matches any pattern; deny wins over allow |
array_mode | 'all' | 'any' | 'all' | For array-typed args: require all items to pass (all) or at least one (any) |
case_sensitive | boolean | true | Regex flag; not applied to path-root matching |
warn_only | boolean | false | Record the violation in the OTel span without blocking the call |
isPath: trueWhen isPath: true, patterns that look like directory roots are treated as containment checks rather than regex expressions:
| Pattern | Meaning |
|---|---|
"./" or "." | Arg must resolve within process.cwd() |
"/some/dir" | Arg must resolve within /some/dir |
"~" / "${HOME}/projects" | Resolved to homedir |
"${CWD}/data" | Resolved to cwd + /data |
The resolver uses path.resolve + fs.realpathSync to prevent ../ traversal and symlink escapes. Patterns that don't look like directory roots (e.g. "^/etc/.*") fall back to regex matching.
warn_only modeUseful for gradual rollout: set warn_only: true to observe violations without blocking. The call is forwarded and the following attributes appear in the OTel span:
Switch to warn_only: false (the default) when you're ready to enforce.
Use dot notation to constrain fields inside nested parameter objects:
Prevent concurrent tools/call invocations from racing on the same resource (e.g. two agents writing the same file at once). Configure a locks block per server, keyed by tool name.
Concrete scenarios where resource locks solve a real coordination problem:
Factual signals from GitHub, npm, and our automated checks โ not a rating.
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/enmanuelmag-heimdall-mcp)<a href="https://allmcps.com/mcp/enmanuelmag-heimdall-mcp"><img src="https://allmcps.com/api/badge/enmanuelmag-heimdall-mcp?style=directory" alt="Heimdall MCP on AllMCPs" /></a>