tmcproxy
tmcproxy
Proxy mínimo de compatibilidad stdio MCP que puentea el Túnel Seguro MCP de OpenAI / conectores ChatGPT a servidores MCP stdio heredados.
El problema que resuelve
Los conectores ChatGPT (a través del Túnel Seguro MCP de OpenAI) sondean servidores MCP stdio con server/discover — un método introducido en MCP 2026-07-28. Los servidores heredados como codex mcp-server y local-mcp mcp solo hablan 2025-06-18 y devuelven method not found para server/discover, lo que provoca que la creación del conector falle.
tmcproxy se sitúa en medio, responde server/discover en nombre del servidor aguas abajo y reenvía cualquier otra solicitud sin cambios.
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
Requisitos
Node.js >= 23.6.0 (para la ejecución nativa en modo strip de TypeScript — no se necesita paso de compilación)
Uso
Independiente
node src/tmcproxy.ts -- codex mcp-server
node src/tmcproxy.ts -- local-mcp mcpO mediante variable de entorno:
TMCPROXY_DOWNSTREAM="codex mcp-server" node src/tmcproxy.tsCon tunnel-client
Edita tu perfil YAML de tunnel-client (ej. ~/.config/tunnel-client/<profile>.yaml):
mcp:
commands:
- channel: main
command: "node /path/to/tmcproxy/src/tmcproxy.ts -- codex mcp-server"Luego:
tunnel-client run --profile <profile>Cambiar de servidor aguas abajo es solo modificar el comando después de --:
command: "node /path/to/tmcproxy/src/tmcproxy.ts -- local-mcp mcp"Cómo funciona
Solicitud | Comportamiento |
| El proxy responde con un |
| Se reenvía sin cambios al servidor aguas abajo. El proxy nunca llama a |
| Se reenvían sin cambios con el id JSON-RPC preservado. |
Notificaciones (sin id) | Se reenvían; no se espera respuesta. |
JSON malformado | Se devuelve |
Método desconocido | Se reenvía; el error del servidor aguas abajo fluye de vuelta. |
Por qué supportedVersions incluye 2026-07-28
ChatGPT sondea con 2026-07-28. Si la respuesta solo lista 2025-06-18, ChatGPT lo trata como "versión solicitada no soportada" y reintenta indefinidamente — nunca llegando a initialize o tools/list. Al listar 2026-07-28, ChatGPT entra en modo moderno y envía solicitudes sin estado (tools/list, tools/call) directamente. El servidor aguas abajo heredado responde a estas sin un initialize previo (confirmado tanto para codex mcp-server como para local-mcp mcp), por lo que el reenvío transparente funciona.
Depuración
Registro de depuración
Establece TMCPROXY_DEBUG=1 para registrar las solicitudes y respuestas de server/discover en stderr:
TMCPROXY_DEBUG=1 tunnel-client run --profile local-codexSalida en stderr (stdout se mantiene limpio — es el canal 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"],...}Prueba local de extremo a extremo (no se necesita clave API)
tunnel-client dev proxy ejecuta un plano de control en memoria local que reproduce el mismo flujo de sondeo MCP que usa ChatGPT:
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"}}}'Comparación de referencia
Para confirmar que el proxy es necesario, ejecuta el servidor aguas abajo directamente a través de dev proxy y observa el fallo de 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 foundPruebas
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 typecheckLas pruebas unitarias utilizan un servidor aguas abajo simulado (test/fixtures/mock-downstream.js) y cubren: forma de la respuesta discover, sondeo de capacidades, reenvío de initialize, tools/list, preservación de id en tools/call, ping, métodos desconocidos, JSON malformado, notificaciones, duplicación de stderr, manejo de salida del servidor aguas abajo y detección de fugas en stdout.
Las pruebas de integración ejecutan los binarios reales de codex mcp-server y local-mcp mcp si están disponibles en PATH.
Seguridad
Los diagnósticos van solo a stderr; stdout está reservado para tráfico MCP.
No se registran credenciales, claves API ni secretos.
El servidor aguas abajo se inicia mediante argv (sin shell).
Solo
server/discoveres manejado por el proxy; todas las demás solicitudes pasan sin cambios.El proxy no expande los permisos del servidor aguas abajo.
Licencia
Apache-2.0
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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
- Flicense-quality-maintenanceBridges 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
- Flicense-qualityDmaintenanceEnables LLMs to use llama.cpp models via MCP protocol by bridging MCP requests to an OpenAI-compatible API.
- AlicenseAqualityBmaintenanceBridges OpenAI Codex CLI to any MCP client, allowing headless Codex sessions via tools like codex and codex-reply.229MIT
Related MCP Connectors
MCP server bridging holepunchto/keet-identity-key to the Hive agentic identity network
Agent-native MCP server over the public saagarpatel.dev corpus. Read-only, stateless.
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/mkusaka/tmcproxy'
If you have feedback or need assistance with the MCP directory API, please join our Discord server