Agent Skills by ALSEL
汎用LLM・AI開発⭐ リポ 0品質スコア 65/100

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 により、複数のサブプロセスがセッション追跡なしでプールを共有できるようにしたい。

動作方法

  1. ホスト(例:Electron メイン)で、ソースごとに 1 つの PoolClient インスタンスを持つ McpClientPool を保持する。各インスタンスは実際の @modelcontextprotocol/sdk クライアントを保有しています。
  2. 127.0.0.1:0(ランダムポート)でローカル HTTP サーバーを立ち上げます。
  3. StreamableHTTPServerTransport({ sessionIdGenerator: undefined })でラップします — ステートレスモード、セッションアフィニティなし。
  4. @modelcontextprotocol/sdk/serverServer をトランスポートに接続し、ListToolsRequestSchema(プールへファンアウト、ネームスペース付きのツール名)と CallToolRequestSchema(返却をディスパッチ)を登録します。
  5. /mcp への全ての受信リクエストを HTTP メソッドに関わらず transport.handleRequest(req, res) にルーティングします。
  6. URL http://127.0.0.1:<port>/mcp を各スポーンされた SDK サブプロセスにその MCP エンドポイントとして返却します。
  7. サブプロセスは 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

本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: kjuhwa · kjuhwa/skills-hub · ライセンス: MIT