mcp-orchestrator について
mcp-orchestratorは、複数の下流MCPサーバーを接続し、ツールを統一的に検索・呼び出すハブです。ツールの遅延ロード、認証設定、STDIOまたはHTTPのトランスポートが必要な環境に適しています。
主な機能
- 01JSON設定による下流サーバー登録
- 02サーバー名によるツールの名前空間化
- 03BM25または正規表現による検索
- 04必要に応じたツールの遅延ロード
- 05STDIOとHTTPのトランスポート対応
- 06ツール定義のキャッシュ
活用シーン
- 01複数のMCPサーバーを横断してツールを検索
- 02関連するツールだけを読み込みコンテキスト使用量を抑制
- 03設定済みの認証情報でリモートツールを呼び出す
MCP 対応
下流MCPサーバーに接続してツールを検出・インデックス化し、検索とリモート呼び出しのツールをMCPクライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx mcp-orchestratorSTORAGE_BACKENDStorage backend for tool cache. Use 'memory' for development or 'redis' for production.REDIS_URLRedis connection URL. Required only when STORAGE_BACKEND=redis.SERVER_CONFIG_PATHPath to the server_config.json file listing downstream MCP servers.ORCHESTRATOR_PORTPort for the HTTP transport server (default: 8080).ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP Orchestrator
複数の下流 MCP サーバーに接続し、そのツールを集約して、強力なツール検索機能とともに統一されたアクセスを提供する中央ハブです。
遅延ツール読み込みを中心に構築されています。すべてのサーバーを検索しても、Claude のコンテキストウィンドウを使い切りません。
特長
- 設定ファイルによるサーバー登録:JSON 設定ファイルから下流 MCP サーバーを追加
- ツールの名前空間化:
server_name__tool_name形式を自動適用 - ツール検索:遅延読み込みに対応した統合 BM25/正規表現検索
- 柔軟な認証:保存済みの静的ヘッダーまたはトークン転送
- 複数のトランスポート:stdio または HTTP
- ツール定義のキャッシュ:定義をキャッシュし、生の結果をそのまま返す
- ストレージバックエンド:インメモリ(開発用)または Redis(本番用)
クイックスタート
インストール
pip install mcp-orchestrator
MCP サーバーの実行
# Run as stdio MCP server (for Claude Desktop, Cursor, etc.)
mcp-orchestrator
# Or run with Python directly
python -m mcp_orchestrator.main
HTTP トランスポート:
ORCHESTRATOR_TRANSPORT=http ORCHESTRATOR_PORT=8080 python -m mcp_orchestrator.main
これにより、CORS を有効にして http://localhost:8080/mcp でサーバーが起動します。
サーバーの設定
server_config.json に下流 MCP サーバーを追加します。
{
"servers": [
{
"name": "my-server",
"url": "http://localhost:8080/mcp",
"transport": "http",
"auth_type": "static",
"auth_headers": {
"Authorization": "Bearer my-token"
}
},
{
"name": "my-stdio-server",
"url": "server.py",
"transport": "stdio",
"command": "uv",
"args": ["run", "python", "server.py"]
}
]
}
ツールの検索
オーケストレーターは統合ツール検索を提供します(デフォルトは BM25、正規表現も任意で使用可能)。
# BM25 search (default - natural language)
results = await mcp_client.call_tool("tool_search", {
"query": "get weather information",
"max_results": 3
})
# Regex search (set use_regex=true)
results = await mcp_client.call_tool("tool_search", {
"query": "weather|forecast",
"use_regex": true,
"max_results": 3
})
アーキテクチャ
┌─────────────────────────────────────────────────────┐
│ MCP Orchestrator │
│ │
│ ┌──────────────────────────────────────────────┐ │
│ │ FastMCP Server │ │
│ │ ┌─────────────┐ ┌──────────────────┐ │ │
│ │ │ tool_search │ │ call_remote_tool │ │ │
│ │ └─────────────┘ └──────────────────┘ │ │
│ └──────────────────────────────────────────────┘ │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
│ │ Server │ │ Tool │ │ Storage │ │
│ │ Registry │ │ Search │ │(Memory/Redis)│ │
│ └──────────┘ └──────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────┘
│
┌───────────────────┼───────────────────┐
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ MCP Svr │ │ MCP Svr │ │ MCP Svr │
│ #1 │ │ #2 │ │ #N │
└─────────┘ └─────────┘ └─────────┘
設定
環境変数
| 変数 | デフォルト | 説明 |
|---|---|---|
STORAGE_BACKEND | memory | ストレージバックエンド(memory または redis) |
REDIS_URL | redis://localhost:6379/0 | Redis 接続 URL |
MCP_ORCHESTRATOR_TOOL_CACHE_TTL | 300 | ツールスキーマキャッシュの TTL(秒) |
MCP_ORCHESTRATOR_DEFAULT_CONNECTION_MODE | stateless | デフォルトの接続モード |
MCP_ORCHESTRATOR_CONNECTION_TIMEOUT | 30.0 | 接続タイムアウト(秒) |
MCP_ORCHESTRATOR_MAX_RETRIES | 3 | 最大再試行回数 |
ORCHESTRATOR_TRANSPORT | stdio | MCP トランスポート(stdio または http) |
ORCHESTRATOR_PORT | 8080 | HTTP トランスポート用ポート |
ORCHESTRATOR_HOST | 0.0.0.0 | HTTP トランスポート用ホスト |
ORCHESTRATOR_LOG_LEVEL | INFO | ログレベル |
SERVER_CONFIG_PATH | server_config.json | サーバー設定ファイルへのパス |
Claude Desktop との連携
Claude Desktop の設定(~/Library/Application Support/Claude/claude_desktop_config.json)に追加します。
{
"mcpServers": {
"mcp-orchestrator": {
"command": "mcp-orchestrator",
"env": {
"STORAGE_BACKEND": "memory",
"ORCHESTRATOR_LOG_LEVEL": "INFO"
}
}
}
}
MCP ツール
tool_search
BM25 による関連度ランキングまたは正規表現パターンマッチングを使用してツールを検索します。
@mcp.tool()
async def tool_search(
query: str,
max_results: int = 3,
use_regex: bool = False,
) -> dict:
"""Search for tools using BM25 or regex.
By default uses BM25 natural language search. Set use_regex=True
to search using Python regex patterns instead.
"""
discover_tools
登録済みの下流サーバーからツールを検出します。
@mcp.tool()
async def discover_tools(
server_name: str,
) -> dict:
"""Discover tools from a registered server and index them for search.
Returns the list of discovered tools with their schemas.
"""
call_remote_tool
下流 MCP サーバー上のツールを直接呼び出します。
@mcp.tool()
async def call_remote_tool(
tool_name: str,
arguments: Optional[dict] = None,
auth_header: Optional[str] = None,
) -> Any:
"""Call a tool on a downstream server.
Args:
tool_name: Namespaced tool name (server_name__tool_name)
arguments: Tool arguments
auth_header: Optional auth header to override server's configured auth
"""
ツール検索結果
検索ツールは、Claude のツール検索システムが想定する形式で結果を返します。
{
"success": true,
"tool_references": [
{
"type": "tool_reference",
"tool_name": "server_name__tool_name"
}
],
"total_matches": 5,
"query": "weather"
}
テスト
テストスイートを実行します。
uv run pytest
カバレッジ付きで実行します。
uv run pytest --cov=mcp_orchestrator
プロジェクト構成
mcp-orchestrator/
├── src/mcp_orchestrator/
│ ├── __init__.py
│ ├── main.py # Entry point
│ ├── models.py # Pydantic models
│ ├── mcp_server.py # FastMCP server
│ ├── config_loader.py # Config file loader
│ ├── server/
│ │ └── registry.py # Server registry
│ ├── tools/
│ │ ├── router.py # Tool router
│ │ └── search.py # Tool search service
│ └── storage/
│ ├── base.py # Storage interface
│ ├── memory.py # In-memory backend
│ └── redis.py # Redis backend
├── tests/
│ ├── test_registry.py
│ ├── test_search.py
│ ├── test_storage.py
│ ├── test_models.py
│ └── test_integration.py
├── server_config.json # Pre-configured downstream servers
├── pyproject.toml
├── README.md
└── .env # Environment variables (not committed)
ライセンス
MIT ライセンス
貢献
貢献を歓迎します。ガイドラインについてはCONTRIBUTING.mdをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。