Skip to main content
Glama
DunkelCloud

ToolMesh

Official
by DunkelCloud

ToolMesh — 让 AI 智能体安全地接触真实系统。

AI 智能体与企业系统之间缺失的控制层。ToolMesh 将不受控制的 AI 工具调用转变为受治理、可审计的流程,并能在几分钟(而非几个月)内连接任何 REST API 或 MCP 服务器。

Go License CI Go Report Card

30 行 YAML。无需构建服务器。

实际上,MCP 服务器仅暴露了它们所包装的 REST API 的一小部分,您很快就会遇到功能缺失的问题。ToolMesh 让您可以用 .dadl 文件替换包装层——这是一种声明式 YAML 格式,将任何 REST API 描述为 MCP 工具。无需构建、部署或维护包装服务器。

Current:    Claude → ToolMesh → MCP Server → REST API
With DADL:  Claude → ToolMesh → REST API (via .dadl file)

您无需手动编写 YAML。您可以询问 LLM。Claude、GPT、Gemini——任何了解 DADL 规范的模型都能在几秒钟内生成有效的 .dadl 文件。描述您的需求,将文件放入 config/dadl/,搞定。

“为 GitHub API 创建一个 DADL——列出仓库、打开议题并创建拉取请求。”

10 秒钟。适用于任何了解该格式的 LLM。

与仅仅传递工具调用的 MCP 网关不同,ToolMesh 增加了生产部署真正需要的功能:

  • 凭据安全 — 凭据在执行时注入,绝不会出现在提示词或 LLM 客户端配置中

  • 授权 — 细粒度的用户 → 计划 → 工具控制 (OpenFGA)

  • 输入与输出门控 — JS 策略可拦截机密数据并过滤响应

  • 审计追踪 — 每次工具调用都通过结构化日志或可查询的 SQLite 进行记录

Related MCP server: MCPGate

六大支柱

支柱

功能

支持技术

任意后端

30 行 DADL 即可替代整个 MCP 服务器。同时也代理现有的 MCP 服务器。

Go MCP SDK + DADL (.dadl 文件)

代码模式

同时连接 15 个 MCP 服务器?没有 ToolMesh 是不可能的。代码模式将 50,000+ token 缩减至约 1,000。

AST 解析的工具调用

凭据存储

凭据在执行时注入——绝不出现在提示词中,绝不出现在 LLM 客户端配置中

通过执行器管道进行按请求注入

OpenFGA

细粒度授权(用户 → 计划 → 工具)。例如:免费用户仅限只读,专业用户拥有所有权限。

OpenFGA

门控 (Gate)

在执行前拦截机密数据,在响应中脱敏 PII

goja

审计

每次工具调用均可记录并查询——用 SQL 回答“那个智能体做了什么?”

slog / SQLite

尝试演示

想在安装前试用 ToolMesh?连接到我们的公共演示实例——无需 Docker,无需配置,无需 API 密钥:

demo.toolmesh.io — 通过 ToolMesh 使用 Hacker News API。适用于 Claude Desktop、Claude Code 和 ChatGPT。登录名:dadl / toolmesh

快速入门

# Clone
git clone https://github.com/DunkelCloud/ToolMesh.git
cd ToolMesh

# Configure
cp .env.example .env
# IMPORTANT: Set a password — without it, all requests are rejected:
#   TOOLMESH_AUTH_PASSWORD=my-secret-password
# Or set an API key for programmatic access:
#   TOOLMESH_API_KEY=my-api-key

# Optional: local overrides (build locally, enable OpenFGA, HTTPS proxy, ...)
# cp docker-compose.override.yml.example docker-compose.override.yml
# # then edit docker-compose.override.yml — picked up automatically by Docker Compose

# Start (runs in bypass mode by default — no authz required)
docker compose up -d

# Verify it's running (default port: 8123)
curl http://localhost:8123/health

# MCP endpoint: http://localhost:8123/mcp
# Note: Most MCP clients require HTTPS — see TLS section below

TLS (重要)

ToolMesh 本身提供纯 HTTP 服务。大多数 MCP 客户端(包括 Claude Desktop)要求 HTTPS,并会拒绝 http:// URL。您需要在 ToolMesh 前面放置一个 TLS 终止反向代理:

选项

使用场景

Caddy

自托管且拥有公共域名——自动获取 Let's Encrypt 证书

Cloudflare Tunnel

无需开放端口,零配置 TLS

nginx / Traefik

您的技术栈中已存在

仅针对本地开发,您可以通过手动编辑 claude_desktop_config.json 来绕过 TLS(GUI 会强制要求 https://)。

连接到 Claude Desktop

添加到您的 Claude Desktop MCP 配置中:

{
  "mcpServers": {
    "toolmesh": {
      "url": "https://toolmesh.example.com/mcp"
    }
  }
}

对于没有 TLS 代理的本地开发:

{
  "mcpServers": {
    "toolmesh": {
      "url": "http://localhost:8123/mcp"
    }
  }
}

连接到 Claude.ai (自定义连接器)

ToolMesh 支持带有 PKCE S256 的 OAuth 2.1 以实现远程访问。在 config/users.yaml 中配置用户,并使用公共 HTTPS URL 作为 MCP 端点。

身份验证

ToolMesh 支持两种可以独立或组合使用的身份验证方法。所有 OAuth 状态(令牌、授权码、客户端)均持久化在 Redis 中,并在服务器重启后保留。

OAuth 2.1 (交互式登录)

config/users.yaml 中定义用户,并使用 bcrypt 哈希密码:

users:
  - username: admin
    password_hash: "$2a$10$..."
    company: dunkelcloud
    plan: pro
    roles: [admin]

使用任何支持 bcrypt 的工具生成密码哈希:

htpasswd -nbBC 10 "" "my-password" | cut -d: -f2

对于单用户设置,TOOLMESH_AUTH_PASSWORD 仍可作为后备方案。使用 TOOLMESH_AUTH_USERTOOLMESH_AUTH_PLANTOOLMESH_AUTH_ROLES(默认值:ownerproadmin)配置身份。

API 密钥 (程序化访问)

config/apikeys.yaml 中定义 API 密钥,并使用 bcrypt 哈希密钥:

keys:
  - key_hash: "$2a$10$..."
    user_id: claude-code-user
    company_id: dunkelcloud
    plan: pro
    roles: [tool-executor]

每个密钥映射到一个具有特定计划和角色的不同用户身份,这些身份会流向 OpenFGA 授权。

对于单密钥设置,TOOLMESH_API_KEY 仍可作为后备方案。相同的 TOOLMESH_AUTH_USERTOOLMESH_AUTH_PLANTOOLMESH_AUTH_ROLES 变量控制身份。

DCR 速率限制

动态客户端注册 (DCR) 的速率限制为每 IP 每小时 5 次注册,以防止滥用。

授权模式

OPENFGA_MODE 控制是否强制执行 OpenFGA 授权:

模式

行为

bypass (默认)

所有工具调用均无需授权检查即可执行

restrict

OpenFGA 强制执行用户 → 计划 → 工具授权(需要 OPENFGA_STORE_ID

先使用 bypass 快速运行,在引导 OpenFGA 后切换到 restrict

配置

查看 docs/configuration.md 获取所有环境变量。

超时调整

变量

默认值

描述

TOOLMESH_MCP_TIMEOUT

120

调用下游 MCP 服务器的 HTTP 客户端超时(秒)

TOOLMESH_EXEC_TIMEOUT

120

工具执行超时(秒)——后端调用的上下文截止时间

对于需要更多时间的后端(例如基于浏览器的网页抓取工具),请增加这些值:

TOOLMESH_MCP_TIMEOUT=180
TOOLMESH_EXEC_TIMEOUT=180

日志记录

ToolMesh 通过 slog 使用结构化日志记录。默认级别为 debug,以便开箱即用实现完整的 MCP 可追溯性——生产环境请设置 LOG_LEVEL=info 或更高,因为调试日志包含完整的请求/响应负载。每个后端的调试文件、日志格式和所有日志变量均记录在 docs/configuration.md 中。

架构

查看 docs/architecture.md 获取完整的架构文档。

                          ┌─────────────────────────────────┐
                          │          ToolMesh               │
                          │                                 │
                          │  Redis · OpenFGA · Audit        │
                          │  Credential Store · JS Gate     │
                          │                                 │
AI Agent ──MCP──────────▶ │   AuthZ ▸ Creds ▸ Gate ▸ Exec  │
                          │                                 │
                          └──┬──────┬───────┬───────┬───────┘
                             │      │       │       │
                          MCP Client  .dadl   .dadl   .dadl
                             │      │       │       │
                             ▼      ▼       ▼       ▼
                          MCP     Stripe  GitHub  Vikunja
                          Server   API     API     API

添加外部 MCP 服务器

创建或编辑 config/backends.yaml

backends:
  - name: memorizer
    transport: http
    url: "https://memorizer.example.com/mcp"
    api_key_env: "MEMORIZER_API_KEY"

将凭据设置为环境变量:

CREDENTIAL_MEMORIZER_API_KEY=sk-mem-xxxxx

来自每个后端的工具都带有前缀(例如 memorizer_retrieve_knowledge)。凭据由执行器在运行时通过 CredentialStore 注入——LLM 永远看不到 API 密钥。

REST 代理模式 (DADL)

当 MCP 服务器没有暴露您需要的端点时,在 .dadl 文件中描述它,ToolMesh 将直接调用 REST API——无需包装服务器。两种模式并行运行。

将 REST 后端添加到 config/backends.yaml

backends:
  - name: vikunja
    transport: rest
    dadl: /app/dadl/vikunja.dadl
    url: "https://vikunja.example.com/api/v1"

对于具有私有 IP 或自签名证书的内部服务:

backends:
  - name: internal-api
    transport: rest
    dadl: internal.dadl
    url: "https://192.168.1.50:8443/api"
    allow_private_url: true    # allow private/loopback addresses (default: true)
    tls_skip_verify: true      # accept self-signed certificates (default: false)

想让 Claude 列出 GitHub 议题?只需这样做:

tools:
  list_issues:
    method: GET
    path: /repos/{owner}/{repo}/issues
    description: "List issues for a repository"
    params:
      owner: { type: string, in: path, required: true }
      repo:  { type: string, in: path, required: true }
      state: { type: string, in: query }

ToolMesh 处理身份验证、分页、重试和错误映射。DADL 支持 Bearer 令牌、OAuth2、会话认证、API 密钥、自动分页、带退避的重试、响应转换、复合工具等。

有关完整规范、示例和社区注册表,请参阅 dadl.ai。创建 .dadl 文件的最快方法是询问任何了解该格式的 LLM。

代码模式

将 15 个 MCP 服务器连接到单个 AI 智能体?没有 ToolMesh,这根本行不通——上下文窗口会填满,客户端会卡死。代码模式使之成为可能。

ToolMesh 不会暴露数百个单独的工具定义(50,000+ token),而是暴露两个元工具:list_toolsexecute_code。LLM 获得紧凑的 TypeScript 接口(约 1,000 token)并针对它们编写 JavaScript:

const repos = await toolmesh.github_list_repos({ sort: "updated" });
const issues = await toolmesh.github_list_issues({
  owner: repos[0].owner.login,
  repo: repos[0].name,
  state: "open"
});

单次往返中的多次 API 调用。ToolMesh 解析代码,提取工具调用,并通过完整的执行管道进行路由。

扩展模型

ToolMesh 使用受 Go 的 database/sql 驱动模式启发的基于注册表的扩展模型。三种组件类型可通过 init() 注册进行扩展:

组件

内置

配置

凭据存储

embedded

CREDENTIAL_STORE=<name>

工具后端

mcp, rest (DADL), echo

config/backends.yaml

门控评估器

goja

GATE_EVALUATORS=<list>

企业级扩展(InfisicalStore、VaultStore、Compliance-LLM 等)已在计划中,并将通过 Go 构建标签包含:go build -tags enterprise ./cmd/toolmesh

详情请参阅 docs/architecture.md

贡献

请参阅 CONTRIBUTING.md

许可证

Apache 2.0 — 版权所有 2025–2026 Dunkel Cloud GmbH

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Open-source MCP proxy that enforces security policies, content scanning, and audit logging between AI agents and tool servers
    25
    AGPL 3.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCPGate aggregates multiple MCP servers into a single unified endpoint, enabling centralized tool management with granular filtering, automatic namespacing, and observability. Features a real-time web dashboard and optional PostgreSQL-backed audit trails for monitoring and controlling AI tool access across local and remote deployments.
    6 npm
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    A secure tool-execution plane for agentic AI that enforces JWT authentication, rate limiting, prompt-injection inspection, and audit logging, while ingesting downstream OpenAPI endpoints as MCP tools.
    MIT