mcpField
M
mcp-orchestrator

mcp-orchestrator

ローカル
github.com/rupinder2AI・エージェント635 週間前に更新

mcp-orchestrator について

mcp-orchestratorは、複数の下流MCPサーバーを接続し、ツールを統一的に検索・呼び出すハブです。ツールの遅延ロード、認証設定、STDIOまたはHTTPのトランスポートが必要な環境に適しています。

主な機能

  1. 01JSON設定による下流サーバー登録
  2. 02サーバー名によるツールの名前空間化
  3. 03BM25または正規表現による検索
  4. 04必要に応じたツールの遅延ロード
  5. 05STDIOとHTTPのトランスポート対応
  6. 06ツール定義のキャッシュ

活用シーン

  1. 01複数のMCPサーバーを横断してツールを検索
  2. 02関連するツールだけを読み込みコンテキスト使用量を抑制
  3. 03設定済みの認証情報でリモートツールを呼び出す

MCP 対応

下流MCPサーバーに接続してツールを検出・インデックス化し、検索とリモート呼び出しのツールをMCPクライアントに公開します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"rupinder2-mcp-orchestrator": {
"command": "uvx",
"args": [
"mcp-orchestrator"
],
"env": {
"STORAGE_BACKEND": "<STORAGE_BACKEND>",
"REDIS_URL": "<REDIS_URL>",
"SERVER_CONFIG_PATH": "<SERVER_CONFIG_PATH>",
"ORCHESTRATOR_PORT": "<ORCHESTRATOR_PORT>"
}
}
}
}
起動コマンドuvx mcp-orchestrator
設定が必要な環境変数
STORAGE_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 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypimcp-orchestrator0.1.2

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

MCP Orchestrator

PyPI Version Python Version License: MIT Tests Contributions Welcome

複数の下流 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_BACKENDmemoryストレージバックエンド(memory または redis)
REDIS_URLredis://localhost:6379/0Redis 接続 URL
MCP_ORCHESTRATOR_TOOL_CACHE_TTL300ツールスキーマキャッシュの TTL(秒)
MCP_ORCHESTRATOR_DEFAULT_CONNECTION_MODEstatelessデフォルトの接続モード
MCP_ORCHESTRATOR_CONNECTION_TIMEOUT30.0接続タイムアウト(秒)
MCP_ORCHESTRATOR_MAX_RETRIES3最大再試行回数
ORCHESTRATOR_TRANSPORTstdioMCP トランスポート(stdio または http)
ORCHESTRATOR_PORT8080HTTP トランスポート用ポート
ORCHESTRATOR_HOST0.0.0.0HTTP トランスポート用ホスト
ORCHESTRATOR_LOG_LEVELINFOログレベル
SERVER_CONFIG_PATHserver_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をご覧ください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。