使用说明
海姆达尔
MCP服务器和人工智能应用程序的开源可观察性平台
概述
Heimdall是一个全面的可观察性平台,专为监控模型上下文协议(MCP)服务器和AI/LLM应用程序而设计。基于OpenTetry标准,它为您的AI基础设施提供实时跟踪、指标和洞察。
主要特点
- 🔍 实时跟踪 -跟踪每个工具调用、资源访问和提示执行
- 📊 仪表板分析 -可视化延迟、错误率和使用模式
- 🔌 轻松集成 -Python和JavaScript/TypeScript的简单SDK装饰器
- 🏠 自托管 -完全在您自己的基础设施上运行
- 📈 OpenTetry原生 -基于行业标准的可观察性协议
待办事项
- [ ] 跟踪用户 -将跟踪与用户身份相关联,以进行用户级分析(目前所有请求都显示为匿名)。
- [ ] 评估 -LLM评估和质量评分,包括人工注释。
- [ ] 添加云主机服务器 -托管云部署。
建筑
目前我们只支持自托管部署。架构如下:
┌─────────────────┐ OTLP/HTTP ┌─────────────────┐
│ MCP Server │ ──────────────────▶│ Heimdall │
│ + SDK │ Port 4318 │ Backend │
└─────────────────┘ └────────┬────────┘
│
│ REST API
│
┌────────▼────────┐
│ Heimdall │
│ Frontend │
│ Port 5173 │
└─────────────────┘
快速开始
📖 有关详细的设置说明,请参阅 QUICKSTART.md
先决条件
- Node.js 18+
- Python 3.9+(适用于Python SDK)
1.启动后端
cd backend
npm install
npm run dev
2.启动前端
cd frontend
npm install
npm run dev
3.创建组织和项目
- 导航至http://localhost:5173
- 创建账户 使用您的电子邮件和密码
- 创建组织 -这将您的项目分组在一起
- 创建项目 -每个项目都有一个唯一的ID用于跟踪收集
4.获取您的配置
创建组织和项目后,转到 设置 查找:
- 组织ID -您的组织标识符
- 项目ID -您的项目标识符
您需要这些ID来配置SDK。
SDK集成
Heimdall提供用于检测MCP服务器的SDK:
| SDK | 软件包 | 安装 |
|---|---|---|
python hmdl |
pip install hmdl |
|
| JavaScript/TypeScript | hmdl |
npm install hmdl |
Python示例
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()
备注:Python SDK使用自检自动捕获参数名称。输入显示为命名对象:
{"query": "test", "limit": 5}.
JavaScript/TypeScript示例
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();
备注:使用
paramNames将输入显示为命名对象的选项(例如。,{"query": "test", "limit": 5})而不是数组(["test", 5]).
使用环境变量
您还可以使用环境变量配置SDK:
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"
然后简单地初始化客户端,不带参数:
# Python
client = HeimdallClient()
// JavaScript/TypeScript
const client = new HeimdallClient();
配置
环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
HEIMDALL_ENDPOINT |
后端OTLP端点 | http://localhost:4318 |
HEIMDALL_ORG_ID |
来自仪表板的组织ID | default |
HEIMDALL_PROJECT_ID |
跟踪分组的项目ID | default |
HEIMDALL_SERVICE_NAME |
跟踪中的服务名称 | mcp-server |
HEIMDALL_ENVIRONMENT |
环境标签 | development |
HEIMDALL_ENABLED |
启用/禁用跟踪 | true |
HEIMDALL_API_KEY |
用于身份验证的API密钥 | - |
HEIMDALL_DEBUG |
启用调试日志记录 | false |
HEIMDALL_BATCH_SIZE |
批处理的跨度数量 | 100 |
HEIMDALL_FLUSH_INTERVAL_MS |
刷新间隔(毫秒) | 5000 |
客户端配置选项
| 选项 | Python | JavaScript | 描述 |
|---|---|---|---|
| 端点 | endpoint |
endpoint |
Heimdall后端URL |
| 组织ID | org_id |
orgId |
您的组织ID |
| 项目ID | project_id |
projectId |
您的项目ID |
| 服务名称 | service_name |
serviceName |
您的服务名称 |
| 环境 | environment |
environment |
部署环境 |
| API密钥 | api_key |
apiKey |
可选API密钥 |
| 调试 | debug |
debug |
启用调试日志记录 |
包装/装饰选项
trace_mcp_tool / traceMCPTool
| 选项 | Python | JavaScript | 描述 |
|---|---|---|---|
| 姓名 | name (arg) |
name |
自定义跨度名称(默认为函数名称) |
| 参数名称 | 不适用(自动) | paramNames |
用于输入显示的参数名称数组 |
| 捕获输入 | 不适用 | captureInput |
是否捕获输入参数(默认值:true) |
| 捕获输出 | N/A | captureOutput |
是否捕获返回值(默认值:true) |
observe (通用)
| 选项 | Python | JavaScript | 描述 |
|---|---|---|---|
| 姓名 | name |
name |
自定义跨度名称(默认为函数名称) |
| 捕获输入 | capture_input |
captureInput |
是否捕获输入参数(默认值:true) |
| 捕获输出 | capture_output |
captureOutput |
是否捕获返回值(默认值:true) |
项目结构
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
运行测试
测试SDK与后端的集成:
# Python SDK test
cd tests
source .venv/bin/activate
python test_python_sdk.py
# JavaScript SDK test
cd tests
npm run test:js
文档
- 📖 全部文件 -综合指南和API参考资料
- 🚀 快速入门指南 -5分钟后起床跑步
- 🐍 开发包 -PyPI上的Python SDK
- 📦 JavaScript SDK -npm上的JavaScript/TypeScript SDK
贡献
欢迎投稿!请随时提交拉取请求。
支持与联系
- 📧 电子邮件: founder@tryheimdall.com
- 🌐 网站: tryheimdall.com
- 📖 文档: docs.tryheimdall.com
- 🐛 问题: GitHub问题
许可证
此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。