====== OpenAI Secure MCP Tunnels ====== //Vytvořeno: **13.6.2026** | Aktualizováno: **~~LASTMOD~~**// [[https://developers.openai.com/api/docs/guides/secure-mcp-tunnels|OpenAI Secure MCP Tunnel]] je mechanismus pro připojení privátních MCP serverů k podporovaným produktům OpenAI bez vystavení serveru do veřejného internetu. Prakticky jde o outbound-only tunel: v síti, která už vidí na privátní MCP server, běží klient a přes HTTPS si tahá práci z OpenAI. ===== Co to řeší ===== MCP servery často běží lokálně, ve firemní síti, v Kubernetes clusteru nebo za firewallem. Pokud je má používat ChatGPT, Codex, Responses API nebo jiný OpenAI produkt, vzniká problém: OpenAI se k nim z internetu nedostane. Bez tunelu jsou typické možnosti: * vystavit MCP server veřejně, * otevřít inbound firewall pravidla, * nasadit vlastní reverse proxy nebo VPN, * nebo MCP server z OpenAI produktů vůbec nepoužívat. Secure MCP Tunnel řeší hlavně první dvě varianty. Privátní MCP server zůstává uvnitř vlastní sítě a ven navazuje spojení jen klient ''tunnel-client''. To je bezpečnostně i provozně přijatelnější model pro prostředí, kde není žádoucí otevírat nové veřejné endpointy. ===== Proč to OpenAI udělala ===== OpenAI tím doplnila chybějící enterprise deployment pattern pro MCP. Samotný MCP standard řeší, jak spolu klient a server mluví, ale neřeší pohodlně situaci, kdy je server privátní a AI produkt běží mimo danou síť. Důvody jsou praktické: * firmy mají interní nástroje, API a databáze, které nemají být veřejně dostupné, * security týmy často neschválí nový veřejný MCP endpoint jen kvůli AI klientovi, * ChatGPT, Codex a API integrace potřebují jednotný způsob, jak takový server najít a volat, * provozní tým potřebuje healthchecky, readiness, metriky a viditelnost, jestli tunel skutečně běží. Podle [[https://github.com/openai/tunnel-client|README klienta openai/tunnel-client]] je ''tunnel-client'' zákazníkem provozovaný agent za Secure MCP Tunnel. Připojuje privátní nebo localhost MCP server k ChatGPT, Codexu, Responses API a AgentKitu přes OpenAI-hosted tunnel endpoint, ale samotný MCP server nenechává na veřejném internetu. ===== Jak to funguje ===== Zjednodušený tok: - V OpenAI Platform se vytvoří nebo nastaví tunnel endpoint. - V interní síti se spustí ''tunnel-client''. - Klient zná ''tunnel_id'', runtime API klíč a adresu lokálního MCP serveru. - OpenAI produkt pošle MCP požadavek na OpenAI-hosted tunnel endpoint. - ''tunnel-client'' přes outbound HTTPS long-polling zjistí, že má práci. - Požadavek předá lokálnímu MCP serveru přes stdio nebo HTTP. - Odpověď vrátí zpět stejnou tunelovou cestou. MCP server tedy nepotřebuje veřejný listener. Z pohledu OpenAI produktu existuje normální MCP request path, ale síťové spojení iniciuje komponenta uvnitř privátní sítě. ===== Síťové požadavky ===== Host, kde běží ''tunnel-client'', potřebuje: * outbound HTTPS na ''api.openai.com:443'', * při použití control-plane mTLS outbound HTTPS na ''mtls.api.openai.com:443'', * lokální nebo privátní síťový přístup k MCP serveru. Inbound přístup z internetu není potřeba. To je hlavní rozdíl proti veřejně vystavenému MCP endpointu. ===== Základní nastavení ===== Nejdřív je potřeba: * ''tunnel_id'' z [[https://platform.openai.com/settings/organization/tunnels|Platform tunnel settings]], * runtime API key pro ''tunnel-client'', * oprávnění Tunnels **Read** + **Use** pro identitu, která klienta spouští, * MCP server dostupný z hostu, kde klient poběží. Příklad pro lokální stdio MCP server: export CONTROL_PLANE_API_KEY="sk-..." tunnel-client init \ --sample sample_mcp_stdio_local \ --profile local-stdio \ --tunnel-id tunnel_0123456789abcdef0123456789abcdef \ --mcp-command "python /path/to/server.py" tunnel-client doctor --profile local-stdio --explain tunnel-client run --profile local-stdio Pro HTTP MCP server se místo --mcp-command použije --mcp-server-url, například: tunnel-client init \ --sample sample_mcp_stdio_local \ --profile private-http \ --tunnel-id tunnel_0123456789abcdef0123456789abcdef \ --mcp-server-url https://mcp.internal.example.com/mcp Po spuštění musí ''tunnel-client run'' zůstat běžet. Discovery konektoru i samotné MCP tool calls závisí na aktivním klientovi. ===== Kde klienta provozovat ===== V dokumentaci jsou popsané tři typické varianty: * **Kubernetes sidecar** – klient běží ve stejném Podu jako MCP server a připojuje se přes ''localhost''. * **Samostatný Kubernetes deployment** – klient běží odděleně a MCP server vidí přes privátní Service. * **VM nebo systemd služba** – klient běží na stroji, který má síťový přístup k MCP serveru. Obecné pravidlo: ''tunnel-client'' má běžet ve stejné trust boundary, odkud je MCP server už dnes bezpečně dostupný. ===== Napojení do ChatGPT ===== V [[https://chatgpt.com/#settings/Connectors|ChatGPT connector settings]] se vytvoří custom connector a jako typ připojení se zvolí **Tunnel**. Potom se vybere dostupný tunel nebo se vloží platné ''tunnel_id''. Pokud se tunel v ChatGPT nezobrazuje, je potřeba zkontrolovat hlavně: * zda je tunel asociovaný s cílovým ChatGPT workspace, * zda není asociovaný pouze s Platform organizací, * zda má operátor konektoru oprávnění Tunnels **Read** + **Use**. ===== Bezpečnostní poznámky ===== Secure MCP Tunnel není obecná veřejná proxy pro libovolný provoz. Je to transportní cesta pro MCP požadavky přes OpenAI-hosted tunnel endpoint. Důležité vlastnosti: * adresa MCP serveru zůstává privátní, * ''tunnel-client'' se autentizuje vůči OpenAI tunnel control plane, * přístup se váže na organizace a workspaces v OpenAI prostředí, * klient podporuje enterprise síťové prvky jako outbound proxy, custom CA bundle, control-plane client certifikáty a MCP-side mTLS, * metadata změn tunelu se objevují v audit logách jako ''tunnel.created'', ''tunnel.updated'' a ''tunnel.deleted''. Klient vystavuje provozní endpointy ''/healthz'', ''/readyz'', ''/metrics'' a lokální admin UI na ''/ui''. Admin UI je podle dokumentace defaultně dostupné jen přes loopback; vzdálené vystavení by mělo být vědomé provozní rozhodnutí. ===== OAuth a interní HTTP callouty ===== OAuth discovery může jít přes tunel, takže samotný MCP server může zůstat privátní. Autorizační server ale není automaticky tunelovaný. Pokud není dosažitelný z veřejného internetu ani z hostu s ''tunnel-client'', OAuth flow může selhat. Pokročilá část dokumentace zmiňuje také allowlistované HTTP callouty přes embedded MCP server Harpoon. To je určené pro malé množství explicitně nakonfigurovaných interních REST endpointů. Harpoon není obecná proxy: volající si nemůže vybrat libovolný host a požadavky jsou omezené na nastavené cíle a metody. ===== Kdy to použít ===== Secure MCP Tunnel dává smysl, když: * MCP server běží lokálně, on-premises nebo v privátní síti, * nechceš nebo nemůžeš vystavit veřejný MCP endpoint, * chceš připojit interní nástroje do ChatGPT, Codexu nebo Responses API, * bezpečnostní model preferuje outbound-only spojení, * potřebuješ provozní dohled nad tím, jestli spojení do tunelu běží. Naopak to není náhrada za obecnou VPN, plnohodnotný reverse proxy stack nebo univerzální tunel pro libovolné interní služby. ===== Zdroje ===== * [[https://developers.openai.com/api/docs/guides/secure-mcp-tunnels|OpenAI API Docs – Secure MCP Tunnel]] * [[https://github.com/openai/tunnel-client|GitHub – openai/tunnel-client]] * [[https://platform.openai.com/settings/organization/tunnels|OpenAI Platform – Tunnel settings]] * [[https://chatgpt.com/#settings/Connectors|ChatGPT – Connector settings]]