mcpField
M
mcp-dynamic-orchestrator

mcp-dynamic-orchestrator

github.com/secondskyエージェントワークフロー240224 回インストール5 週間前に更新
リポジトリ

mcp-dynamic-orchestrator について

設定済みのMCPサーバーを見つけ、機能を調べ、生成されたクライアントコードからツールを呼び出すスキルです。レジストリを基盤とし、コード実行には制限があり、vmベースのサンドボックスは信頼できないコード向けの安全境界ではありません。

主な機能

  1. 01クエリやフィルターによるMCP検索
  2. 02必要な機能だけを確認
  3. 03コード実行によるMCPツール呼び出し
  4. 04レジストリによるサーバー設定
  5. 05許可するMCP IDの制限

活用シーン

  1. 01タスクに適したサーバーを探す
  2. 02ツール呼び出し前に利用可能な操作を確認する
  3. 03エージェントコードから設定済みMCPツールを呼び出す

MCP 対応

エージェントによるMCPサーバーの検索と機能確認を支援し、コード実行を通じて公開ツールを呼び出します。stdioとHTTPのトランスポートに対応しますが、コード実行とサンドボックスの安全性には制限があります。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/secondsky/claude-skills --skill mcp-dynamic-orchestrator

インストール後、Claude Code で/mcp-dynamic-orchestratorを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
mcp-protocol.md
registry-schema.md
security-model.md
troubleshooting.md
scripts/
describe_mcp.ts
execute_mcp_code.ts
list_mcp_capabilities.ts

詳細

概要

このスキルを使用すると、次のことができます。

  • 利用可能な MCP サーバーと、その用途を確認します。
  • すべてのツールスキーマを読み込まずに、特定の MCP の機能を調べます。
  • 生成された mcp-clients/* モジュールを介して MCP ツールを呼び出す TypeScript/JavaScript を実行します。

MCP サーバーが設定されていない場合、list_mcp_capabilities は空のリストと、ユーザーが MCP エントリを追加できるよう skills/mcp-dynamic-orchestrator/mcp.registry.json を案内するメッセージを返します。

このスキルは mcp.registry.json を読み取るため、そこに MCP エントリ(Cloudflare MCP など)を追加すると、ツールの接続設定を変更せずに自動的に検出できるようになります。

Cloudflare MCP の例

Cloudflare MCP サーバーは、次のように mcp.registry.json に設定できます。

{
  "id": "cloudflare",
  "title": "Cloudflare platform MCP",
  "summary": "Interact with Cloudflare's MCP endpoint for documentation, examples, and platform operations exposed via the official Cloudflare MCP server.",
  "mcp": {
    "transport": "stdio",
    "command": "npx",
    "args": [
      "mcp-remote",
      "https://docs.mcp.cloudflare.com/sse"
    ]
  },
  "domains": ["cloudflare", "workers", "kv", "r2", "queues", "zero_trust", "networking", "security", "observability"],
  "tags": ["cloudflare", "platform", "infra", "docs", "workers", "mcp"],
  "examples": [
    "Fetch Cloudflare Workers documentation for a specific API.",
    "Search Cloudflare platform docs for queues or KV usage patterns.",
    "Look up configuration guidance for Zero Trust or networking features."
  ],
  "sensitivity": "low",
  "visibility": "default",
  "priority": 10,
  "autoDiscoverTools": true
}

このエントリがある場合:

  • クエリに Cloudflare、Workers、KV、R2、Queues などが含まれると、list_mcp_capabilities は cloudflare を返します。
  • id: "cloudflare" を指定して describe_mcp を呼び出すと、Cloudflare MCP サーバーの簡潔なツール概要が表示されます。
  • execute_mcp_code を使うと、エージェントは次のような TypeScript を記述できます。
import * as cloudflare from "mcp-clients/cloudflare";

async function main() {
  const docs = await cloudflare.search_docs({ query: "Workers KV" });
  console.log(docs.summary);
}

mcp-clients/cloudflare で利用できる実際の関数は、MCP ツール定義から動的に生成されます。エージェントは常に次の手順を実行してください。

  1. list_mcp_capabilities で検出します。
  2. describe_mcp で利用可能な操作を確認します。
  3. execute_mcp_code を介してそれらの操作を使用します。

使用方法

  1. 自然言語のクエリまたはフィルターを指定して list_mcp_capabilities を呼び出し、利用可能な MCP を確認します。
  2. MCP(例:cloudflare)を選び、describe_mcp を呼び出して操作を把握します。
  3. mcp-clients/<id> からインポートし、エクスポートされた関数を呼び出す TypeScript/JavaScript を記述します。
  4. execute_mcp_code でコードを実行します。安全のため、必要に応じて allowedMcpIds を制限してください。

ルール

  • 個々の MCP ツールがトップレベルのツールであると想定しないでください。
  • 常に「検出 → 説明 → コード生成 → execute_mcp_code」の順に進めてください。
  • 正確なパラメーター構造が必要な場合に限り、describe_mcp で detail: "schema" を指定してください。

既知の制限事項

サンドボックスのセキュリティ(重大)

⚠️ 現在のサンドボックス実装は、信頼できないコードに対して安全ではありません。

⚠️ vm ベースのサンドボックスはセキュリティ境界ではありません。 Node の vm モジュールは脱出可能です(Node のドキュメントを参照)。この設定は偶発的な損害を減らすだけです。信頼できない MCP エントリを実行する場合は、適切な OS レベルの分離を施した別のプロセス/コンテナーで実行してください。

  • セキュリティ境界ではない vm.createContext() を使用します
  • プロトタイプ汚染や require() の操作などによって脱出される可能性があります
  • Claude が生成したコード(信頼できるソース)のみに対して有効にしてください
  • MCP_ORCH_ENABLE_SANDBOX=1 環境変数が必要です
  • セキュリティの詳細については references/security-model.md を参照してください
プロセス起動の強化(コマンドと環境変数の許可リスト)

mcp.registry.json にエントリを追加すると、オーケストレーターによって次の制御が適用されます。

  1. コマンド許可リスト — 許可されるのは npx, npm, pnpm, yarn, bunx, bun, node, deno, uvx, uv, python, python3, cargo, go のみです(パスを含まない名前は PATH から解決されます)。絶対パス/相対パスとシェルは拒否されます。無効にするには MCP_ORCH_ALLOW_RAW_COMMANDS=1 を設定します(stderr に大きな警告が表示されます。完全に信頼できるレジストリでのみ使用してください)。
  2. 環境変数の拒否リスト — PATH、NODE_OPTIONS、LD_PRELOAD、DYLD_INSERT_LIBRARIES、PYTHONPATH などは、プロセス起動前に mcp.env から除去されます(除去されたキーごとに stderr に警告が表示されます)。
その他の制限事項
  • TypeScript のコンパイルなし:.ts 形式のユーザーコードは失敗します
  • モジュール解決なし:mcp-clients/* からのインポートは解決されません。$call() API を使用してください
  • 静的レジストリ:MCP の追加/削除には再起動が必要です
  • 限定的なエラー処理:MCP 接続に失敗した場合、汎用エラーが返されます

詳細なトラブルシューティングについては、references/troubleshooting.md を参照してください。

本番環境のステータス

動作中 ✅:

  • list_mcp_capabilities による検出(完全に機能)
  • describe_mcp による検査(完全に機能)
  • レジストリ管理(16 個の MCP を設定済み)
  • MCP クライアント(stdio と HTTP のトランスポート)
  • 安全性の制御(可視性、機密性、ポリシー)

制限あり 🟡:

  • コード実行(環境変数フラグが必要。サンドボックスの安全性は不十分)
  • テスト(基本的なスモークテストのみ)

予定 🔮:

  • Worker スレッドによる安全なサンドボックス(v1.1)
  • TypeScript コンパイルのサポート(v1.1)
  • モジュール解決(v1.1)
  • レジストリの動的更新(v1.2)

ロードマップの全容については、リポジトリのルートにある plan.md を参照してください。

コメント