1. Conduid
  2. Developer Tools
  3. Heimdall
MCP server · Developer Tools

Heimdall

Open Source Observability Platform for MCP Servers & Apps

64Good

Scored 7 days ago · breakdown

About Heimdall

Heimdall is an MCP server published by delta0-inc in the Developer Tools category: open Source Observability Platform for MCP Servers & Apps.

The repository has 29 stars and 3 forks, with the last commit 8 months ago. Six months or more without a commit doesn't mean the server is broken, but check the open issues before depending on it in production.

Install

Claude Code
claude mcp add heimdall -- npx -y heimdall-mcp
npx
npx -y heimdall-mcp

This server has no ConduID identity, so agent calls to it are not receipted. Pin the version you install and review the source before granting it credentials.

Ask AI

✦

Ask AI about Heimdall

Powered by Claude · Grounded in docs

I know everything about Heimdall. Ask me about installation, configuration, usage, or troubleshooting.

Security checks

Static checks derived from the repository 4 hours ago. Heuristics on the source, not an audit.

  • ✓README presentThe repository ships documentation.
  • ✓License declaredUsable under a stated license.
  • ✓Tests presentA test suite exists in the repository.
  • ✓Dependencies pinnedA lockfile pins dependency versions.
  • ✓No dynamic code executionSource scan found no eval, dynamic Function, or shell execution.
  • !Scoped permissionsDoesn't declare a permission scope. Assume it can do anything its process can.

README

Heimdall

Open Source Observability Platform for MCP Servers and AI Applications

Overview

Heimdall is a comprehensive observability platform designed for monitoring Model Context Protocol (MCP) servers and AI/LLM applications. Built on OpenTelemetry standards, it provides real-time tracing, metrics, and insights into your AI infrastructure.

Key Features

  • 🔍 Real-time Tracing - Track every tool call, resource access, and prompt execution
  • 📊 Dashboard Analytics - Visualize latency, error rates, and usage patterns
  • 🔌 Easy Integration - Simple SDK decorators for Python and JavaScript/TypeScript
  • 🏠 Self-hosted - Run entirely on your own infrastructure
  • 📈 OpenTelemetry Native - Built on industry-standard observability protocols

TODO

  • Track Users - Associate traces with user identities for user-level analytics (currently all requests are shown as anonymous).
  • Evaluate - LLM evaluation and quality scoring, including human annotation.
  • Add Cloud Host Server - Managed cloud deployment.

Architecture

Currently we only support self-hosted deployment. The architecture is as follows:

┌─────────────────┐     OTLP/HTTP      ┌─────────────────┐
│   MCP Server    │ ──────────────────▶│  Heimdall       │
│   + SDK         │    Port 4318       │  Backend        │
└─────────────────┘                    └────────┬────────┘
                                                │
                                                │ REST API
                                                │
                                       ┌────────▼────────┐
                                       │  Heimdall       │
                                       │  Frontend       │
                                       │  Port 5173      │
                                       └─────────────────┘

Quick Start

📖 For detailed setup instructions, see QUICKSTART.md

Prerequisites

  • Node.js 18+
  • Python 3.9+ (for Python SDK)

1. Start the Backend

cd backend
npm install
npm run dev

2. Start the Frontend

cd frontend
npm install
npm run dev

3. Create Organization and Project

  1. Navigate to http://localhost:5173
  2. Create an account with your email and password
  3. Create an Organization - this groups your projects together
  4. Create a Project - each project has a unique ID for trace collection

4. Get Your Configuration

After creating your organization and project, go to Settings to find:

  • Organization ID - Your organization identifier
  • Project ID - Your project identifier

You'll need these IDs to configure the SDK.

SDK Integration

Heimdall provides SDKs for instrumenting your MCP servers:

SDK Package Installation
Python hmdl pip install hmdl
JavaScript/TypeScript hmdl npm install hmdl

Python Example

from hmdl import HeimdallClient, trace_mcp_tool

# Initialize client with your organization and project IDs
client = HeimdallClient(
    endpoint="http://localhost:4318",
    org_id="your-org-id",           # From Settings page
    project_id="your-project-id",   # From Settings page
    service_name="my-mcp-server",
    environment="development"
)

@trace_mcp_tool()
def search_tool(query: str, limit: int = 10) -> dict:
    return {"results": [], "query": query, "limit": limit}

result = search_tool("test", limit=5)
client.flush()

Note: Python SDK automatically captures parameter names using introspection. Inputs are displayed as named objects: {"query": "test", "limit": 5}.

JavaScript/TypeScript Example

import { HeimdallClient, traceMCPTool } from 'hmdl';

// Initialize client with your organization and project IDs
const client = new HeimdallClient({
  endpoint: "http://localhost:4318",
  orgId: "your-org-id",           // From Settings page
  projectId: "your-project-id",   // From Settings page
  serviceName: "my-mcp-server",
  environment: "development"
});

const searchTool = traceMCPTool(
  async (query: string, limit: number = 10) => ({ results: [], query, limit }),
  { name: "search-tool", paramNames: ["query", "limit"] }
);

await searchTool("test", 5);
await client.flush();

Note: Use the paramNames option to display inputs as named objects (e.g., {"query": "test", "limit": 5}) instead of arrays (["test", 5]).

Using Environment Variables

You can also configure the SDK using environment variables:

export HEIMDALL_ENDPOINT="http://localhost:4318"
export HEIMDALL_ORG_ID="your-org-id"
export HEIMDALL_PROJECT_ID="your-project-id"
export HEIMDALL_SERVICE_NAME="my-mcp-server"
export HEIMDALL_ENVIRONMENT="development"
export HEIMDALL_ENABLED="true"

Then simply initialize the client without arguments:

# Python
client = HeimdallClient()
// JavaScript/TypeScript
const client = new HeimdallClient();

Configuration

Environment Variables

Variable Description Default
HEIMDALL_ENDPOINT Backend OTLP endpoint http://localhost:4318
HEIMDALL_ORG_ID Organization ID from dashboard default
HEIMDALL_PROJECT_ID Project ID for trace grouping default
HEIMDALL_SERVICE_NAME Service name in traces mcp-server
HEIMDALL_ENVIRONMENT Environment tag development
HEIMDALL_ENABLED Enable/disable tracing true
HEIMDALL_API_KEY API key for authentication -
HEIMDALL_DEBUG Enable debug logging false
HEIMDALL_BATCH_SIZE Number of spans to batch 100
HEIMDALL_FLUSH_INTERVAL_MS Flush interval in ms 5000

Client Configuration Options

Option Python JavaScript Description
Endpoint endpoint endpoint Heimdall backend URL
Organization ID org_id orgId Your organization ID
Project ID project_id projectId Your project ID
Service Name service_name serviceName Name of your service
Environment environment environment Deployment environment
API Key api_key apiKey Optional API key
Debug debug debug Enable debug logging

Wrapper/Decorator Options

trace_mcp_tool / traceMCPTool

Option Python JavaScript Description
Name name (arg) name Custom span name (defaults to function name)
Parameter Names N/A (automatic) paramNames Array of parameter names for input display
Capture Input N/A captureInput Whether to capture input arguments (default: true)
Capture Output N/A captureOutput Whether to capture return value (default: true)

observe (general-purpose)

Option Python JavaScript Description
Name name name Custom span name (defaults to function name)
Capture Input capture_input captureInput Whether to capture input arguments (default: true)
Capture Output capture_output captureOutput Whether to capture return value (default: true)

Project Structure

heimdall/
├── backend/          # OTLP receiver and API server
├── frontend/         # React dashboard
├── tests/            # SDK integration tests
├── QUICKSTART.md     # Detailed setup guide
└── README.md         # This file

heimdall-python/      # Python SDK
heimdall-js/          # JavaScript/TypeScript SDK

Running Tests

Test the SDK integration with the backend:

# Python SDK test
cd tests
source .venv/bin/activate
python test_python_sdk.py

# JavaScript SDK test
cd tests
npm run test:js

Documentation

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Support & Contact

License

This project is licensed under the MIT License - see the LICENSE file for details.

README fetched from the repository 4 hours ago. The original is authoritative.

Questions

About Heimdall

How do I install Heimdall?

Run claude mcp add heimdall -- npx -y heimdall-mcp, then add the server to your MCP client's configuration.

Is Heimdall safe to use with an AI agent?

Its trust score is 64 out of 100 (good). It passes 5 of the 6 static security checks run so far; the failures are listed above. It has no ConduID identity yet, so agent calls to it are not receipted.

Is Heimdall still maintained?

The last commit was 8 months ago and 1 open issues. That's long enough that you should check whether the maintainer is responding to issues before depending on it.