Heimdall MCP

Heimdall MCP

Trace every MCP tool call. No code changes needed.

enmanuelmag
@enmanuelmag
Published on Jun 14, 2026
Visit site
1 PeerPush
🔥
Awarded
Trending Now
PeerPush

Details

Categories
Open Source
Pricing
Free
Platforms
CLIDesktop

About Heimdall MCP

I built Heimdall MCP after getting frustrated not knowing what was actually happening inside MCP servers — which tools were slow, which failed silently, what inputs Claude was sending. The idea: a transparent proxy that sits between your MCP client (Claude Desktop, OpenCode, Cursor) and any MCP server, captures every JSON-RPC message as an OpenTelemetry span, and persists it to a storage backend you configure. No modifications to the target server required. You just wrap it in mcp.json: "command": "heimdall", "args": ["--store", "sqlite://~/.heimdall/traces.db", "--", "node", "my-server.js"] For remote servers (HTTP/SSE): "command": "heimdall", "args": ["--store", "postgres://...", "--target", "http://remote-server/sse"] Storage options: SQLite (local WASM, no native deps), Postgres, MySQL, or any OTLP-compatible backend. Also ships as a TypeScript library with a fluent builder API if you want to embed it directly. Why I think this is useful: - LLM agents are increasingly orchestrating MCP tools, but observability tooling hasn't caught up - Existing proxies (mcpwall, Airlock, MetaMCP) focus on security/policy enforcement, not persistence of traces - IBM's ContextForge does something similar but it's a heavy Python gateway — this is meant to be a lightweight npm package Schema design note: the DB schema stores spans in native OTel format — Unix nanosecond timestamps (`BIGINT` in Postgres/MySQL), integer SpanKind and SpanStatusCode, and `resource_attributes` set via official `@opentelemetry/semantic-conventions`. This means you can point any OTel-compatible UI (Jaeger, Grafana Tempo, SigNoz) at the data without transformation. The `--otlp` flag also exports spans to a live OTLP HTTP endpoint in real time, additive to DB storage. Still early (v0.1), but the core proxy + all three stores + OTLP export are working. Looking for feedback on the interceptor API design and whether the OTel semantic conventions mapping makes sense. GitHub: https://github.com/enmanuelmag/heimdall-mcp

Product Insights

Heimdall MCP is a free CLI and desktop observability tool for AI developers that captures JSON-RPC messages from MCP servers. It functions as a transparent proxy to provide deep visibility into tool calls for Claude Desktop, Cursor, and OpenCode without requiring code modifications.

  • Operates as a lightweight proxy requiring zero modifications to existing MCP server code.
  • Supports multiple storage backends including SQLite, Postgres, MySQL, and OTLP-compatible backends.
  • Provides native OpenTelemetry span formatting for easy integration with Jaeger, Grafana, and SigNoz.
  • Available as both a standalone CLI tool and a TypeScript library with a fluent builder API.

Ideal for: AI developers who need to debug tool latency and execution failures within MCP servers used by Claude Desktop or Cursor.

Screenshots

Screenshot 1 of Heimdall MCP

Reviews (1)

Average 5.0 out of 5

5.0

Based on 1 review

5
1
4
0
3
0
2
0
1
0

Great open source tool to trace every MCP tool call without any code changes!

Comments (1)

enmanuelmag
@enmanuelmag

Tiny proxy that sits between your MCP client and server, captures every tool call as an OTel span, persists to SQLite/Postgres/MySQL or Open Telemtry backends. Zero code changes to target server.