Get a demo — 30 minutes →
← Back to blog
Anomity robot illustrating OpenAI's Secure MCP Tunnel Retires "It's Only on the Internal Network"
Research

OpenAI's Secure MCP Tunnel Retires "It's Only on the Internal Network"

TL;DR
  • OpenAI's Secure MCP Tunnel lets private MCP servers serve ChatGPT, Codex and other OpenAI products without opening an inbound firewall hole. The connection is inverted: OpenAI products post MCP requests to a hosted tunnel endpoint, and a customer-run, open-source tunnel-client picks them up over long-polled outbound HTTPS.
  • The design is genuinely conservative. Calls stay bounded by customer-owned target registration, allowed methods and response-size limits. OpenAI states plainly that it is not a general-purpose network bridge.
  • Authentication works with OAuth, private certificate authorities, outbound proxies or client certificates, and OAuth discovery for the MCP server travels through the tunnel so the hosted product can learn how to authenticate.
  • An extension called Harpoon widens the same mechanism to approved REST targets, so private APIs that were never MCP servers at all become reachable through the same path.
  • The security question is not the tunnel. It is what sits on the other end. Internal MCP servers were built for a network where only trusted callers could reach them, and a large share of published MCP vulnerabilities are unauthenticated-by-default flaws that only mattered because nothing outside could connect.
  • Practically: an engineer can stand up a tunnel-client next to an internal server without asking the network team, because the only requirement is outbound HTTPS, which is already allowed everywhere.
  • Three controls close most of it: a registry of tunnelled targets with owners, authentication on the MCP server itself rather than on the network path, and knowing which endpoints in your fleet are running a tunnel-client.

OpenAI has shipped the Secure MCP Tunnel into alpha, and the engineering is sound. It solves a real problem in the way a security-conscious team would solve it, and the failure modes worth discussing are not in the tunnel. They are on either end of it.

The design

The problem: enterprises run MCP servers inside private networks, and hosted products cannot reach them. The obvious answer is an inbound path, and every competent security team refuses to provide one.

OpenAI's answer inverts the connection. The private side makes the first move. OpenAI products send MCP requests to an OpenAI-hosted tunnel endpoint, and a customer-run client already sitting beside the private MCP server picks them up over long-polled outbound HTTPS. That client, tunnel-client, is open source and customer-deployed. It receives requests, forwards them to an approved local server, and returns responses and notifications over the same connection. As OpenAI puts it, outbound HTTPS is already familiar to enterprise firewalls, proxy environments and platform teams.

The boundaries are explicit. Calls stay bounded by customer-owned target registration, allowed methods and response-size limits. OpenAI states directly that this is not a general-purpose network bridge. Authentication works with OAuth, private certificate authorities, outbound proxies or client certificates, and OAuth discovery for the target server travels through the tunnel path so the hosted product can learn how to authenticate. Codex has an integrated plugin workflow on top.

There is also Harpoon, an extension that widens the same path to approved REST targets, so private APIs that were never MCP servers become reachable too.

No inbound listener, no new port, no exposed service. The tunnel is not the risk. The risk is that it makes something reachable that was built on the assumption that nothing could reach it.

What was actually protecting your internal MCP servers

Look at the shape of published MCP server vulnerabilities over the past eighteen months. They are not exotic. They are missing authentication, empty default secrets, unauthenticated message endpoints, tool restrictions enforced in the wrong layer, and STDIO transports that execute whatever they are handed. We have written up a long run of these, and the pattern in how MCP servers expose enterprise secrets is representative: the server holds broad credentials and authenticates callers weakly or not at all.

Those deployments were not secure. They were unreachable, which looked the same from the inside. Network position was doing the work that authentication was supposed to do, and that arrangement held for as long as the only callers were on the same segment.

A tunnel changes the population of callers without changing a single line of the server. The compensating control evaporates and the original flaw becomes the entire control surface. This is the oldest pattern in enterprise security, arriving in a new protocol: implicit network trust meets an explicit remote caller. It also raises the stakes on where tool restrictions are enforced, because a restriction applied in the client rather than at execution is bypassable by any caller that skips the client, which is the failure behind the mcp-server-kubernetes tool restriction bypass.

Assumption the server was built onStill true after tunnelling?What has to replace it
Only callers on the internal network can connectNoAuthentication on the MCP server itself, not on the network path
Callers are services we operateNoA model-driven caller whose next request depends on what the last one returned
Request volume is predictable and human-pacedNoRate limiting and response-size limits, which the tunnel provides but the server should too
Tool restrictions in the client are sufficientNoEnforcement at the execution layer, not in the client
Credentials in the server environment are internal-onlyNoScoped, rotatable credentials per target, with an owner

The approval checkpoint that does not exist

Historically, making an internal service reachable from outside required a firewall change. That request went to a team whose job included asking why, and the conversation was the control. It was a slow control and frequently an annoying one, and it caught things.

The tunnel needs no firewall change. tunnel-client is open source, runs next to the server, and requires only outbound HTTPS, which is already permitted everywhere. An engineer who wants ChatGPT to query an internal service can deploy it in an afternoon and will not encounter anyone positioned to ask why. That is the same property that makes it adoptable, and it is why the governance has to move from the network review that will not happen to target registration and endpoint inventory, which can.

This is the argument for an MCP server registry becoming a hard requirement rather than a good practice. A registry with an owner per server, a declared credential scope and a recorded approval is the only thing standing between a tunnelled internal service and nobody knowing it is tunnelled.

Authentication has to move to the server

OpenAI supports OAuth, private CAs, outbound proxies and client certificates, and routes OAuth discovery through the tunnel so the hosted product can authenticate properly. Use it. The specific thing to avoid is the pattern where the tunnel authenticates and the server behind it does not, on the grounds that only the tunnel can reach it. That is the internal-network assumption rebuilt one layer up, and it fails the same way.

The identity question underneath is whose authority the agent is acting with. If the tunnel presents a single service credential, every user of the hosted product acts as that credential, and your audit trail records the service rather than the person. The distinction between token exchange and passthrough matters here, and AI gateways and user-level OAuth for MCP servers covers the tradeoffs. OAuth for MCP servers explained is the primer if the 2026 spec is not yet familiar.

What to do now

  • Register tunnelled targets before anyone tunnels. Target registration is customer-owned, which means it is your control and only works if you operate it. An owner, a credential scope and a written approval per target.
  • Authenticate at the MCP server. Do not rely on the tunnel being the only caller. Assume a second caller will exist eventually, because one usually does.
  • Audit the servers you are about to expose, before you expose them. Run through the list in Model Context Protocol security explained. Unauthenticated internal servers are common, and finding one after the tunnel is up is the wrong order.
  • Inventory tunnel-client processes across the fleet. This is the detection that matters, because the network layer will not tell you. A tunnel-client is an outbound HTTPS process like thousands of others.
  • Cover Harpoon targets in the same policy. Private REST APIs behind implicit network trust are a larger and older population than your MCP servers.
  • Decide on identity now. Service credential or per-user token. Choose deliberately, because retrofitting per-user identity onto a tunnel that has been live for six months is a migration, not a setting.

The convergence

Anthropic shipped enterprise-managed MCP connectors to bind connector authorisation to the identity provider. OpenAI shipped a tunnel to solve reachability. The 2026-07-28 specification changed how identity travels in stateless deployments, covered in stateless MCP. Different vendors, adjacent problems, one direction of travel: MCP is becoming the enterprise integration layer.

Integration layers inherit the governance problems of everything they integrate. The useful thing about being early is that the inventory is still small enough to build. In eighteen months the question will not be whether to tunnel an internal MCP server. It will be how many are already tunnelled, and by whom. If you want to query that inventory conversationally rather than through a console, our own MCP server and its OpenAPI description are on the developer resources page.

Frequently asked questions

What is the Secure MCP Tunnel and how does it work?

It is OpenAI's answer to a real problem: enterprises run MCP servers inside private networks, and hosted products cannot reach them without an inbound path that security teams reasonably refuse to open. The tunnel inverts the direction of connection. OpenAI products send MCP requests to an OpenAI-hosted tunnel endpoint, and a customer-deployed open-source client called tunnel-client, running next to the private MCP server, picks them up over long-polled outbound HTTPS. It forwards each request to an approved local server and returns responses and notifications through the same connection. Because outbound HTTPS is already familiar to enterprise firewalls, proxies and platform teams, nothing new has to be opened. It is in alpha testing with customers.

Is the tunnel itself a security risk?

The mechanism is well constructed. There is no inbound listener, no new port, and no exposed service. Calls stay bounded by customer-owned target registration, allowed methods and response-size limits, and OpenAI is explicit that it is not a general-purpose network bridge. Authentication supports OAuth, private certificate authorities, outbound proxies and client certificates, and OAuth discovery for the target server travels through the tunnel path. If you were going to build this, this is close to how you would build it. The risk is not in the transport. It is that the transport makes a category of internal service reachable that was previously reachable only from inside, and those services were designed under the old assumption.

Why does reachability change the risk on an internal MCP server?

Because a large share of published MCP server vulnerabilities are not subtle logic bugs. They are missing authentication, default-empty secrets, unauthenticated message endpoints and command execution reachable without credentials. Those findings were survivable in practice for internal deployments because the only callers were on the same network. Once a hosted agent can issue requests to that server, the compensating control is gone and the underlying flaw is the whole control. Nothing about the server changed. The population of things that can call it did, and the server's threat model was written for the old population.

What is Harpoon?

Harpoon is an extension of the same mechanism to approved REST targets, so customer private APIs that are not MCP servers can also be reached. It is useful, and it also means the governance question is not limited to your MCP inventory. An internal REST API built on the assumption that only internal services call it, with authentication that amounts to being on the right network segment, is now a registrable target. If you are inventorying tunnelled MCP servers, inventory tunnelled REST targets in the same pass, because they will be the ones nobody thought to include.

Who can set this up, and does it need network team approval?

That is the part worth internalising. The tunnel-client is open source and runs next to the server it fronts. Its only network requirement is outbound HTTPS, which every environment already permits. There is no firewall change to request, no ingress rule to justify, and therefore no natural approval checkpoint. An engineer who wants ChatGPT to query an internal service can make it happen in an afternoon without talking to anyone whose job is to say no. This is not a criticism of the design; the same property is what makes it deployable. It does mean the control has to come from target registration and inventory rather than from the network review that will not happen.

How is this different from Anthropic's enterprise-managed MCP connectors?

They solve adjacent problems. Anthropic's enterprise-managed connectors focus on who is authorised to use a connector, binding authorisation to the identity provider so that access follows the directory, which we covered in enterprise-managed MCP connectors. OpenAI's tunnel focuses on reachability, getting the request to a server that was previously unreachable. You need both answers. A tunnel with no identity governance means the right server is reachable by the wrong person. Identity governance with no reachability story means the connector works only for cloud-hosted servers. Read together, they show the same convergence: MCP is becoming the enterprise integration layer, and it is inheriting every integration governance problem that came before it.

How does Anomity help govern private MCP servers?

The endpoint sensor inventories MCP servers across the fleet, both the ones declared in agent configurations and the processes actually running, which is how a tunnel-client next to an internal service becomes visible rather than assumed. It covers 144 tracked AI tools along with the CLIs, hooks, plugins and local runtimes attached to them, and surfaces the credential patterns in the environments those processes inherit across 162 patterns. That turns the two questions you cannot currently answer, which internal services are reachable by a hosted agent and which credentials those services hold, into inventory rather than investigation. Enforcement across 180 rules and nine guards then lets you scope rather than block.

Ask AI about Anomity
ChatGPT Claude Perplexity Google AI Grok