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ファイルに置き換えることができます。これは、あらゆるREST APIをMCPツールとして記述するための宣言型YAMLフォーマットです。構築、デプロイ、保守が必要なラッパーサーバーは不要です。

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を作成して。リポジトリの一覧表示、Issueのオープン、プルリクエストの作成ができるようにして。」

10秒で完了。フォーマットを理解しているあらゆるLLMで動作します。

また、単にツール呼び出しを転送するだけのMCPゲートウェイとは異なり、ToolMeshは本番環境で真に必要とされる機能を追加します:

  • クレデンシャルセキュリティ — シークレットは実行時に注入され、プロンプトやLLMクライアントの設定には決して含まれません

  • 認可 — ユーザー → プラン → ツール単位のきめ細かな制御 (OpenFGA)

  • 入出力ゲート — JSポリシーにより機密データをブロックし、レスポンスをフィルタリング

  • 監査証跡 — すべてのツール呼び出しを構造化ログまたはクエリ可能なSQLiteに記録

Related MCP server: MCPGate

6つの柱

機能

基盤

Any Backend

30行のDADLでMCPサーバー全体を代替。既存のMCPサーバーのプロキシも可能。

Go MCP SDK + DADL (.dadlファイル)

Code Mode

15個のMCPサーバーを同時に使用?ToolMeshなしでは不可能。Code Modeで50,000トークン以上を約1,000トークンに削減。

AST解析によるツール呼び出し

Credential Store

シークレットは実行時に注入。プロンプトやLLMクライアント設定には一切含まれない。

Executorパイプラインによるリクエストごとの注入

OpenFGA

きめ細かな認可(ユーザー → プラン → ツール)。例:無料ユーザーは読み取り専用、プロはすべて許可。

OpenFGA

Gate

実行前に機密データをブロックし、レスポンス内のPIIをマスキング。

goja

Audit

すべてのツール呼び出しを記録・クエリ可能。「エージェントが何をしたか」を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を提供します。Claude Desktopを含むほとんどのMCPクライアントは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は、独立して、または組み合わせて使用できる2つの認証方式をサポートしています。すべての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)でIDを設定してください。

APIキー(プログラムによるアクセス)

config/apikeys.yamlでbcryptハッシュ化されたキーを使用してAPIキーを定義します:

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

各キーは、独自のプランとロールを持つ個別のユーザーIDにマッピングされ、OpenFGA認可に反映されます。

シングルキー設定の場合、TOOLMESH_API_KEYがフォールバックとして機能します。同じTOOLMESH_AUTH_USERTOOLMESH_AUTH_PLANTOOLMESH_AUTH_ROLES変数がIDを制御します。

DCRレート制限

動的クライアント登録(DCR)は、悪用を防ぐため、IPあたり1時間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

ツール実行タイムアウト(秒) — バックエンド呼び出しのコンテキスト期限

より時間のかかるバックエンド(ブラウザベースのWebフェッチャーなど)の場合は、これらを増やしてください:

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を介してExecutorによって注入されるため、LLMがAPIキーを見ることはありません。

RESTプロキシモード (DADL)

MCPサーバーが必要なエンドポイントを公開していない場合、.dadlファイルに記述すれば、ToolMeshが直接REST APIを呼び出します。ラッパーサーバーは不要です。両モードは並行して動作します。

config/backends.yamlにRESTバックエンドを追加します:

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のIssueを一覧表示させたいですか?必要なのはこれだけです:

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はベアラートークン、OAuth2、セッション認証、APIキー、自動ページネーション、バックオフ付きリトライ、レスポンス変換、複合ツールなどをサポートしています。

完全な仕様、例、コミュニティレジストリについてはdadl.aiを参照してください。.dadlファイルを最も速く作成する方法は、フォーマットを理解しているLLMに尋ねることです。

Code Mode

15個のMCPサーバーを単一のAIエージェントに接続しますか?ToolMeshなしでは、コンテキストウィンドウが埋まり、クライアントがフリーズするため、単純に動作しません。Code Modeがこれを可能にします。

何百もの個別のツール定義(50,000トークン以上)を公開する代わりに、ToolMeshはlist_toolsexecute_codeという2つのメタツールを公開します。LLMはコンパクトなTypeScriptインターフェース(約1,000トークン)を受け取り、それに対して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"
});

1回のラウンドトリップで複数のAPI呼び出しが可能です。ToolMeshはコードを解析し、ツール呼び出しを抽出して、完全な実行パイプラインを通じてルーティングします。

拡張モデル

ToolMeshは、Goのdatabase/sqlドライバーパターンに触発された、レジストリベースの拡張モデルを使用しています。3つのコンポーネントタイプがinit()登録を通じて拡張可能です:

コンポーネント

ビルトイン

設定

Credential Store

embedded

CREDENTIAL_STORE=<name>

Tool Backend

mcp, rest (DADL), echo

config/backends.yaml

Gate Evaluator

goja

GATE_EVALUATORS=<list>

エンタープライズ拡張(InfisicalStore、VaultStore、Compliance-LLMなど)は計画されており、Goビルドタグを使用して含める予定です:go build -tags enterprise ./cmd/toolmesh

詳細はdocs/architecture.mdを参照してください。

貢献

CONTRIBUTING.mdを参照してください。

ライセンス

Apache 2.0 — Copyright 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