Skip to main content
Glama

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 through

Related 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.ts

tunnel-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"

動作の仕組み

リクエスト

動作

server/discover

プロキシは仕様に沿った DiscoverResult で応答します。機能はダウンストリームから tools/list 経由でプローブされます(推測ではありません)。

initialize

そのままダウンストリームに転送されます。プロキシ自身は initialize を呼び出しません — codex mcp-server はそれを一度だけ許可するため、クライアントのハンドシェイクがそのまま到達する必要があります。

tools/list, tools/call, ping など

JSON-RPC id を保持したままそのまま転送されます。

通知(id なし)

転送されます。応答は期待されません。

不正な JSON

上流に -32700 Parse error が返され、転送されません。

未知のメソッド

転送されます。ダウンストリームのエラーがそのまま返ります。

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-codex

stderr への出力(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

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    F
    maintenance
    A 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.
    4
    12
    MIT
  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Bridges 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
    -
  • A
    license
    A
    quality
    A
    maintenance
    MCP (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.
    6
    660
    AGPL 3.0