mcp-pool-http-proxy-for-subprocess-sdks
複数のMCPソース(Linear、GitHub、Notionなど)をプールして、各サブプロセスが独立した接続を開く代わりに、単一のStreamable-HTTP MCPエンドポイント経由でCodex/Copilot SDKのサブプロセスに公開します。これにより、リソース効率を向上させながら、複数のデータソースへのアクセスを一元管理できます。
description の原文を見る
Expose a pool of MCP sources (Linear, GitHub, Notion, ...) to Codex/Copilot SDK subprocesses through a single Streamable-HTTP MCP endpoint, instead of having each subprocess open independent connections.
SKILL.md 本文
サブプロセス SDK 用 MCP プール HTTP プロキシ
使用する場面
- ホストプロセスが既に多数のソース(Linear、GitHub、Notion など)への MCP 接続を管理している。
- LLM SDK のサブプロセス(Codex、Copilot)を起動し、それ自体が MCP ツールを使用する。
- 各サブプロセスが全てのソースに対して、ステートフルな stdio/SSE 接続を再確立することを避けたい。
- ステートレス HTTP により、複数のサブプロセスがセッション追跡なしでプールを共有できるようにしたい。
動作方法
- ホスト(例:Electron メイン)で、ソースごとに 1 つの
PoolClientインスタンスを持つMcpClientPoolを保持する。各インスタンスは実際の@modelcontextprotocol/sdkクライアントを保有しています。 127.0.0.1:0(ランダムポート)でローカル HTTP サーバーを立ち上げます。StreamableHTTPServerTransport({ sessionIdGenerator: undefined })でラップします — ステートレスモード、セッションアフィニティなし。@modelcontextprotocol/sdk/serverのServerをトランスポートに接続し、ListToolsRequestSchema(プールへファンアウト、ネームスペース付きのツール名)とCallToolRequestSchema(返却をディスパッチ)を登録します。/mcpへの全ての受信リクエストを HTTP メソッドに関わらずtransport.handleRequest(req, res)にルーティングします。- URL
http://127.0.0.1:<port>/mcpを各スポーンされた SDK サブプロセスにその MCP エンドポイントとして返却します。 - サブプロセスは
StreamableHTTPClientTransport(new URL(url))を使用してプールと通信します。
例
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
this.transport = new StreamableHTTPServerTransport({ sessionIdGenerator: undefined });
this.mcpServer = new Server({ name: 'pool', version: '1.0.0' }, { capabilities: { tools: {} } });
this.mcpServer.setRequestHandler(ListToolsRequestSchema, async () => {
const tools = [];
for (const [slug, client] of this.pool.entries()) {
const list = await client.listTools();
tools.push(...list.map(t => ({ ...t, name: `mcp__${slug}__${t.name}` })));
}
return { tools };
});
this.mcpServer.setRequestHandler(CallToolRequestSchema, async (req) => {
const [, slug, tool] = req.params.name.split('__');
return this.pool.get(slug).callTool(tool, req.params.arguments);
});
await this.mcpServer.connect(this.transport);
http.createServer((req, res) => this.transport.handleRequest(req, res)).listen(0, '127.0.0.1');
注意点
- ステートレスモードは
session/notificationsやリソースサブスクリプション を使用してはいけません — それらはいずれもセッション ID が必要です。 127.0.0.1のみにバインドしてください — SDK サブプロセスはあなたの localhost を共有しているため、ポートを公開する必要はありません。- ツール名を積極的にネームスペース付けしてください(
mcp__<source>__<tool>)。そうしないとソース間の衝突が静かに互いを隠します。 transport.handleRequestは POST、GET、DELETE に対応しています — 全てそこにルーティングしてください。メソッドで分岐させようとしないでください。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- kjuhwa
- リポジトリ
- kjuhwa/skills-hub
- ライセンス
- MIT
- 最終更新
- 2026/4/26
Source: https://github.com/kjuhwa/skills-hub / ライセンス: MIT
関連スキル
agent-browser
AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。
anyskill
AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。
engram
AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。
skyvern
AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。
pinchbench
PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。
openui
OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。