tmcproxy
tmcproxy
OpenAI Secure MCP Tunnel / ChatGPT コネクタをレガシーな stdio MCP サーバにブリッジする、最小限の MCP stdio 互換性プロキシ。
これが解決する問題
ChatGPT コネクタ(OpenAI Secure MCP Tunnel 経由)は、MCP 2026-07-28 で導入されたメソッド server/discover を使って stdio MCP サーバをプローブします。codex mcp-server や local-mcp mcp のようなレガシーサーバは 2025-06-18 しか話せず、server/discover に対して method not found を返すため、コネクタの作成に失敗します。
tmcproxy はその間に立ち、ダウンストリームに代わって server/discover に応答し、それ以外のすべてのリクエストをそのまま転送します。
ChatGPT → tunnel-client → tmcproxy → codex mcp-server (or local-mcp mcp)
↑
answers server/discover here,
forwards everything else straight throughRelated MCP server: MCP SSE Proxy
必要条件
Node.js >= 23.6.0(ネイティブ TypeScript ストリップモード実行のため — ビルド手順は不要)
使い方
スタンドアロン
node src/tmcproxy.ts -- codex mcp-server
node src/tmcproxy.ts -- local-mcp mcpまたは環境変数経由:
TMCPROXY_DOWNSTREAM="codex mcp-server" node src/tmcproxy.tstunnel-client と一緒に使う
tunnel-client のプロファイル YAML(例:~/.config/tunnel-client/<profile>.yaml)を編集します:
mcp:
commands:
- channel: main
command: "node /path/to/tmcproxy/src/tmcproxy.ts -- codex mcp-server"その後:
tunnel-client run --profile <profile>ダウンストリームの切り替えは -- の後のコマンドを変更するだけです:
command: "node /path/to/tmcproxy/src/tmcproxy.ts -- local-mcp mcp"動作の仕組み
リクエスト | 動作 |
| プロキシは仕様に沿った |
| そのままダウンストリームに転送されます。プロキシ自身は |
| JSON-RPC id を保持したままそのまま転送されます。 |
通知(id なし) | 転送されます。応答は期待されません。 |
不正な JSON | 上流に |
未知のメソッド | 転送されます。ダウンストリームのエラーがそのまま返ります。 |
supportedVersions に 2026-07-28 を含める理由
ChatGPT は 2026-07-28 でプローブします。応答に 2025-06-18 だけがリストされていると、ChatGPT は「要求されたバージョンがサポートされていない」と判断し、無期限に再試行します — initialize や tools/list に到達することはありません。2026-07-28 をリストすることで、ChatGPT はモダンモードに入り、ステートレスなリクエスト(tools/list, tools/call)を直接送信します。レガシーダウンストリームは事前の initialize なしでこれらに応答するため(codex mcp-server と local-mcp mcp の両方で確認済み)、透過的な転送が機能します。
デバッグ
デバッグログ
TMCPROXY_DEBUG=1 を設定すると、server/discover のリクエストと応答が stderr に記録されます:
TMCPROXY_DEBUG=1 tunnel-client run --profile local-codexstderr への出力(stdout はクリーンなまま — MCP チャネルです):
[tmcproxy] downstream: ["codex","mcp-server"]
[tmcproxy] discover request: {"jsonrpc":"2.0","id":"openai-mcp-discover",...}
[tmcproxy] discover response: {"resultType":"complete","supportedVersions":["2026-07-28","2025-06-18"],...}ローカルエンドツーエンドテスト(API キー不要)
tunnel-client dev proxy は、ChatGPT が使用するのと同じ MCP プローブフローを再現するローカルインメモリコントロールプレーンを実行します:
tunnel-client dev proxy \
--mcp-command "command=node /path/to/tmcproxy/src/tmcproxy.ts -- codex mcp-server,channel=main" \
--url-file /tmp/url.json \
--duration 30s
MCP_URL=$(node -e "console.log(JSON.parse(require('fs').readFileSync('/tmp/url.json','utf8')).mcp_url)")
curl -sS -X POST "$MCP_URL" \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H 'MCP-Protocol-Version: 2026-07-28' \
-H 'Mcp-Method: server/discover' \
-d '{"jsonrpc":"2.0","id":1,"method":"server/discover","params":{"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28"}}}'ベースライン比較
プロキシが必要かどうかを確認するには、ダウンストリームを dev proxy 経由で直接実行し、server/discover の失敗を観察します:
tunnel-client dev proxy \
--mcp-command "command=codex mcp-server,channel=main" \
--url-file /tmp/url.json --duration 30s
# server/discover → -32601 method not foundテスト
pnpm install
pnpm test # unit + integration
pnpm test:unit # mock downstream only
pnpm test:integration # real codex / local-mcp (auto-skipped if not installed)
pnpm typecheck単体テストはモックダウンストリーム(test/fixtures/mock-downstream.js)を使用し、以下をカバーします:discover 応答の形状、機能プローブ、initialize 転送、tools/list、tools/call の id 保持、ping、未知のメソッド、不正な JSON、通知、stderr ミラーリング、ダウンストリーム終了処理、stdout リーク検出。
統合テストは、PATH 上に実際の codex mcp-server および local-mcp mcp バイナリが存在する場合にそれらを起動します。
セキュリティ
診断情報は stderr のみに出力されます。stdout は MCP トラフィック用に予約されています。
認証情報、API キー、シークレットは一切記録されません。
ダウンストリームは argv 経由で起動されます(シェルは使用されません)。
server/discoverのみがプロキシによって処理されます。他のすべてのリクエストは変更されずに通過します。プロキシはダウンストリームの権限を拡張しません。
ライセンス
Apache-2.0
This server cannot be deployed
Maintenance
Related MCP Connectors
- QuallaaOAuthcom.quallaa
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
MCP server for OpenAI API (chat completions, image generation, embeddings) via AceDataCloud
Enable secure connectivity between Sentry issues and debugging data, and LLM clients, using a Model Context Protocol (MCP) server.
Related MCP Servers
- AlicenseBqualityFmaintenanceA lightweight bridge that wraps OpenAI's built-in tools (like web search and code interpreter) as Model Context Protocol servers, enabling their use with Claude and other MCP-compatible models.412MIT
- FlicenseNot gradedqualityNot gradedmaintenanceBridges STDIO-based MCP clients with SSE-based MCP servers, allowing applications like Claude Desktop to connect to remote MCP servers that use SSE transport.9-
- FlicenseNot gradedqualityDmaintenanceEnables LLMs to use llama.cpp models via MCP protocol by bridging MCP requests to an OpenAI-compatible API.-
- AlicenseAqualityAmaintenanceMCP (Model Context Protocol) server for rustunnel. Lets AI agents (Claude Code, Cursor, Windsurf) create and manage public tunnels to local services from inside an agent session.6660AGPL 3.0