Heimdall MCP logo

Heimdall MCP

by enmanuelmag

Proxies MCP servers, records JSON-RPC traces, measures latency, and applies configurable access policies.

Install Heimdall MCP

Pick your client, then add it in one click or paste the config.

STDIONode.js
~/Library/Application Support/Claude/claude_desktop_config.json
claude_desktop_config.json
{
  "mcpServers": {
    "enmanuelmag-heimdall-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@cardor/heimdall-mcp"
      ]
    }
  }
}

Settings → Developer → Edit Config, merge this into mcpServers, then fully quit and reopen Claude Desktop.

Install not yet sandbox-tested— the server itself is confirmed live (we called its tools/list endpoint). The stdio install command is a separate, ongoing check.

Overview

enmanuelmag/heimdall-mcp MCP server sits between an MCP client and another MCP server, forwarding JSON-RPC traffic while recording timing and message data. It accepts client connections over stdio and can reach the target server through stdio, HTTP, or SSE. Traces can be stored in SQLite, PostgreSQL, or MySQL, with optional OpenTelemetry export to compatible backends such as Jaeger, Tempo, or Grafana. Reach for it when you need MCP observability, policy enforcement, or a controlled proxy around an existing server.

Use cases

  • Monitor latency across wrapped MCP server calls
  • Store MCP request and response traces in a database
  • Export MCP telemetry to an OpenTelemetry backend
  • Restrict tools, resources, and arguments before forwarding calls
  • Control filesystem access for an MCP client

Key features

  • Transparent JSON-RPC proxying
  • stdio, HTTP, and SSE target transports
  • SQLite, PostgreSQL, and MySQL trace storage
  • OpenTelemetry OTLP span export
  • Per-server tool, resource, and argument policies
  • Filesystem inspection and editing tools

Tools14

What Heimdall MCP lets your agent do. Expand a tool for its parameters.

Verified live~1.8k tokens of context

Security & health

What it can reach and how reliably it runs — from our own checks, not the maintainer’s claims.

ActiveLast checked 3d ago

Recent health check succeeded.

18/18 checks healthy over the last 80d

Supply-chain signal

No high-severity advisories surfaced by our automated scan.

Critical 0High 0Medium 0Low 0

Scanned 10d ago via OSV.dev · @cardor/heimdall-mcp (npm)

Adoption & maintenance

Factual signals from GitHub, npm, and our automated checks — not a rating.

GitHub stars11Stargazers on the source repository.
npm downloads66Package downloads in the last 30 days.
Last commit3mo agoMost recent push to the default branch.
Tools exposed14Callable tools this server registers over MCP.
Directory activity4 viewsConfig copies, upvotes, and views on AllMCPs.

How Heimdall MCP works

What enmanuelmag/heimdall-mcp MCP server does

enmanuelmag/heimdall-mcp MCP server operates as a transparent proxy for an existing MCP server. It receives requests from an MCP client, applies optional policy checks, forwards permitted messages to the configured target, and returns the target response. The original server does not need to be modified.

Each JSON-RPC request and response is captured as a trace span containing timing information, attributes, and message bodies. Traces can be persisted in SQLite, PostgreSQL, or MySQL. The proxy can also send OpenTelemetry spans through OTLP to systems including Jaeger, Tempo, or Grafana.

Access rules can be defined per server for tools, prompts, and resources. Policies can allow or deny names, restrict resource patterns, and constrain tool arguments. Path-aware rules can help prevent traversal and symlink escapes, while warning-only rules record violations without blocking the call.

How it works

The MCP client connects to the proxy through stdio. The proxy then selects the transport needed by the wrapped server: stdio for a subprocess, HTTP for a remote HTTP endpoint, or SSE for a remote SSE endpoint. Interceptors measure traffic, evaluate policy, forward allowed calls, and write trace data.

When both global and project-level policy files exist, the stricter result applies. Denials are combined, allowed items must pass both configurations, and a denial takes precedence over an allow rule. This lets a global policy establish restrictions that a project configuration cannot loosen.

The package can be used from the command line or as a developer library. The repository documents CLI operations for starting the proxy, initializing configuration, and checking health.

Setup and configuration

Install the package globally or add it to a project with npm. The documented package name is @cardor/heimdall-mcp, and it can be launched with the corresponding CLI or used as a project dependency.

Configuration files are optional. The proxy looks for heimdall.config.ts, .js, .mjs, .cjs, or .json in the project directory, and for a matching file under ~/.config/heimdall/. TypeScript configuration is loaded without a separate compilation step. Server-specific entries are selected by the configured server name or the name returned during initialization.

The repository supports SQLite, PostgreSQL, and MySQL trace stores, plus OTLP export.

Tools and capabilities

enmanuelmag/heimdall-mcp MCP server exposes filesystem-oriented MCP tools through the wrapped server, including reading text or media files, reading multiple files, writing and editing files, creating directories, moving files, listing directories, searching paths, inspecting file metadata, viewing directory trees, and listing allowed directories.

The file operations are restricted to allowed directories. Text reads support optional head or tail limits, media reads return base64 content with MIME information, and edits return a git-style diff. The tool list also includes a deprecated read_file operation; read_text_file is the preferred replacement.

Proxy-level capabilities include latency measurement, JSON-RPC interception, trace storage, OTLP span export, tool and resource policy enforcement, argument constraints, and resource locks for coordinating concurrent tool calls.

Limitations and notes

The proxy exposes stdio to its MCP client even when the wrapped server uses HTTP or SSE. Policy behavior depends on the configuration file and server name being resolved correctly. Without policy files, the proxy remains transparent rather than imposing default restrictions.

The listed filesystem tools only operate within configured allowed directories. Write and move operations can alter or replace files, so policies should be reviewed before exposing them to an agent. read_file is deprecated in favor of read_text_file.

Reviews

No reviews yet — be the first to share how it worked for you.

Frequently Asked Questions about Heimdall MCP

enmanuelmag/heimdall-mcp is an MCP server that connects an MCP client to another MCP server as a transparent proxy. Its main capabilities are intercepting JSON-RPC traffic, measuring latency, storing traces, exporting OpenTelemetry spans, enforcing policies, and exposing filesystem tools such as reading, writing, editing, listing, and searching files.

Install it with npm using the documented package name `@cardor/heimdall-mcp`, either globally or as a project dependency. The repository documents `npm install -g @cardor/heimdall-mcp` and `npm install @cardor/heimdall-mcp`; launch and runtime options are provided by its CLI reference.

Yes, Cursor is shown as an MCP client in the repository’s architecture example. The proxy exposes stdio to the client, while it can connect to the wrapped MCP server over stdio, HTTP, or SSE.

Define allow and deny rules in a `heimdall.config.ts`, `.js`, `.mjs`, `.cjs`, or `.json` file. Rules can target tools, prompts, and resources per server, and `toolPolicies` can constrain arguments with patterns, path containment checks, array handling, or warning-only mode.

It can store traces in SQLite, PostgreSQL, or MySQL, and can additionally export OpenTelemetry spans over OTLP. The documented observability destinations include Jaeger, Tempo, and Grafana.

Related MCP servers

Add a badge to your READMEShow it’s listed — live SVG, Markdown or HTML.

AllMCPs Directory Badge

Full Badge Customizer

Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.

Badge Style:
Live Dynamic SVG PreviewHeimdall MCP AllMCPs Directory Badge
Markdown (GitHub README)
[![AllMCPs](https://allmcps.com/api/badge/enmanuelmag-heimdall-mcp?style=directory)](https://allmcps.com/mcp/enmanuelmag-heimdall-mcp)
HTML Embed
<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>