For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
主导航
2026年6月26日 常规

让私有 MCP 服务器可访问,无须对外公开

我们如何在保留私有网络边界的同时,支持 MCP 流式传输、身份验证,并提供可供检查的客户端。

作者: Denys Kurylenko

让私有 MCP 服务器可访问,无须对外公开

我们构建安全 MCP 隧道,是因为团队最重视的 MCP 服务器,往往也是他们最不愿暴露在互联网上的服务器。

我们想分享如何应对这一约束:让私有服务器保持私有,同时为 ChatGPT、Codex 和其他 OpenAI 产品提供正常的 MCP 请求通路。

模型上下文协议让 AI 系统更容易连接外部工具和数据。但许多最有价值的 MCP 服务器运行在企业网络、私有服务网格、开发者笔记本电脑等环境中,而这些环境本就被设计为拒绝来自公网的入站流量。要将这些服务器连接到托管式 AI 产品,团队往往需要创建公网端点、部署额外的代理基础设施,或在敏感链路中引入新的网络运营方。

安全 MCP 隧道提供了一种更简单的方法: 客户在私有环境中运行一个小型客户端,由它向 OpenAI 建立出站 HTTPS 连接。该客户端会:

  1. 接收 MCP 请求
  2. 将请求转发到获准访问的本地服务器
  3. 通过同一连接返回响应和通知。

OpenAI 产品可以使用标准的 MCP 请求和响应模型,而底层服务器仍受客户现有网络控制措施的保护。

要让这一机制可靠、安全地运行,就必须同时解决几个工程问题:保留服务器的私有网络边界、支持 MCP 的流式传输和身份验证流程,以及为团队提供能够自行检查和运维的客户端。本文将逐一介绍这些设计决策。

我们围绕几项原则设计了这一隧道:仅建立出站连接、明确配置目标、兼容 MCP 流式传输和通知,以及由客户运行客户端,让团队能够自行检查和运维。

这些设计共同让私有工具和数据能够轻松接入 OpenAI 产品,无须将私有 MCP 服务器变成公开服务。

不合适的默认方案

如今,团队通常通过三种方式之一让私有服务可访问:暴露公网端点、运行第三方隧道,或通过 VPN 或对等连接扩展网络。

  • 公网端点让访问变得简单,代价却是削弱网络边界。
  • 第三方隧道提供商可以迅速让私有服务器可访问,但也在连接链路中增加了一家供应商,需要团队对其进行审查、签约、运维并给予信任。对企业团队来说,这并非小事:一个原本旨在让私有工具保持私有的系统,现在必须将隧道提供商纳入安全审查、采购流程、运维手册和元数据暴露范围。
  • VPN 和网络对等连接通过建立广泛的网络互通来解决可访问性问题,但对于范围有限的 MCP 集成而言,这套机制往往过于繁重。

安全 MCP 隧道采用了更有针对性的方法。它不要求客户迁移 MCP 服务器、扩大网络边界或引入另一家连接服务供应商,而是在私有服务器旁部署一个小型、可供检查的开源客户端,由该客户端发起并控制与 OpenAI 的连接。

安全 MCP 隧道反转了建立连接的方向:由私有环境这一侧先发起连接。OpenAI 产品向 OpenAI 托管的隧道端点发送 MCP 请求。隧道服务将任务排入特定隧道的队列,已在私有 MCP 服务器旁运行的客户侧客户端通过出站 HTTPS 连接获取任务。客户端在本地转发请求,再沿同一路径返回响应。

这样,OpenAI 产品就有了一条正常的 MCP 请求通路,既无须私有服务器接收来自公网的入站流量,也无须建立更广泛的网络互通。

安全 MCP 隧道请求生命周期示意图。

图 1。安全 MCP 隧道请求生命周期。

为什么从长轮询开始?

我们有意从一种运维上成熟平稳的传输方式入手。企业防火墙和代理环境已普遍支持出站 HTTPS,平台团队也早已熟悉这种连接方式。长轮询让隧道客户端只按自身处理能力请求相应数量的任务,从而为客户端队列提供天然的背压控制点,而不会促使缓冲区无限增长。

这一选择也让最终交付的运行机制易于理解:

  1. 产品向 OpenAI 托管的端点发送 MCP JSON-RPC 请求。
  2. 隧道服务保持该请求,或以流式方式传输,直到客户运行的客户端返回最终响应
  3. 当请求要求以流式方式返回结果时,隧道可以转发中间的服务器发送事件。

这样,产品就能使用正常的 MCP 请求/响应通路,而 MCP 服务器及其地址仍保持私有。请求、响应和中间事件均通过 OpenAI 托管的隧道端点中继。

保持清晰的安全边界

隧道的作用不是消除网络边界,而是让边界更加明确。客户运行的隧道客户端向隧道控制平面进行身份验证,产品侧使用 OpenAI 托管的隧道端点,私有 MCP 地址则仅在客户环境内部使用。隧道访问与客户现有的 OpenAI 组织、工作空间上下文及配置的隧道身份绑定,而不会成为一条具有独立访问模型的网络通路。

这一设计不仅取决于选对网络连接方向。由于隧道客户端运行在客户环境内部,其行为必须可供检查,且范围应有意保持有限:客户应当能够了解正在运行哪些代码、建立了什么出站通路,以及允许访问哪些私有服务。

MCP 服务器始终位于客户的网络边界内。

图 2。MCP 服务器始终位于客户的网络边界内。

让 MCP 开发拥有本地开发体验

我们希望隧道客户端用起来像一个开发者工具,而不是一项网络工程。开发者应当能够在笔记本电脑上运行 MCP 服务器,在其旁边启动隧道客户端,再将该服务器连接到 ChatGPT 或 Codex,无须创建公网端点,也无须等待 VPN、防火墙规则或对等连接的变更。

当服务器从笔记本电脑迁移到 Kubernetes、虚拟机或其他由客户控制的环境时,同一流程也应继续适用。关键在于,理解和使用它的方式保持不变:在私有 MCP 服务器附近运行客户端,验证客户端能够访问服务器,再由客户端发起面向 OpenAI 的连接。健康检查、就绪状态、日志和本地管理界面,是为了在出现问题时帮助检查这一流程,而不是把隧道变成一项运维工程。

这一开发者体验也延伸到了 Codex 本身。隧道客户端包含一个 Codex 插件,将设置过程转化为有引导的工作流程,而不要求开发者事先了解 tunnel-client 的每个标志、配置方案和控制平面细节。目标并不是提供一个仅供本地临时使用的捷径:当服务器从笔记本电脑迁移到 Kubernetes、虚拟机或其他生产环境时,团队应能沿用插件生成的同一配置结构。

tunnel-client 随附的助手工作流程也体现了同样的理念:助手可以读取 tunnel-client 提供的本地隧道上下文,因此能根据实际设置帮助开发者分析,而不只是给出通用说明。这些上下文包括当前启用的配置方案、已生成的配置、本地 MCP 服务器是否可访问,以及隧道客户端处于启动流程的哪个阶段。 这样,故障排除就融入了开发流程,而不是一条独立的升级求助流程。

从笔记本电脑到生产环境,同一套 tunnel-client 工作流程都适用。

图 3。从笔记本电脑到生产环境,同一套 tunnel-client 工作流程都适用。

为什么隧道客户端开源很重要

隧道客户端是由客户运行的开源软件,部署在客户的网络边界内,与私有 MCP 服务器相邻。这让客户和安全审查人员能够检查在其环境中运行的代码。他们可以检查客户端执行哪些操作、建立什么出站连接、如何在本地转发 MCP 请求,以及哪些配置控制其访问范围。

这种透明度让信任模型与架构保持一致:OpenAI 托管隧道服务,而在客户环境中运行的代码规模小、可供审查,并由客户掌控。

支持企业身份验证,无须广泛的网络访问权限

私有 MCP 服务器很少只是允许匿名访问的内部 HTTP 端点。它们可能依赖 OAuth、私有证书颁发机构、出站代理,或连接 MCP 服务器这一跳所需的客户端证书。要支持这些服务器,就必须将企业网络的既有条件纳入隧道设计,而不能将它们视为需要客户自行绕过的例外情况。

关键约束是 MCP 服务器仍然保持私有。MCP 服务器的 OAuth 发现流程通过隧道进行,因此托管产品可以了解如何进行身份验证,而无须 MCP 服务器在公网上监听。在客户侧,隧道客户端可以根据本地环境进行配置,包括自定义 CA 证书包、代理设置和 MCP 侧的 mTLS。

我们也保持了明确的边界。隧道不会自动让 OpenAI 能够访问所有相关的企业端点。如果授权服务器是私有的,执行 OAuth 流程的组件仍必须能够访问它。这一边界是有意设定的:安全 MCP 隧道为已配置的私有工具提供范围有限的通路,而不是通用网络桥梁。

不止于 MCP

MCP 是模型工具的主要接入形式,但与客户开展的早期 Alpha 测试也揭示了一个密切相关的问题:并非客户的每个私有工作流都已封装为 MCP 服务器。有些重要工作流是位于同一防火墙边界内的现有 REST API。如果安全 MCP 隧道只解决 MCP 的可访问性问题,团队仍需为这些相关的私有 API 单独建立公网端点、引入隧道提供商、配置 VPN 通路,或开展对等连接项目。

Harpoon 将同样的有限连接模型扩展到了获准访问的 REST 目标。客户在隧道客户端上注册带标签的目标,而不是暴露任意 URL。OpenAI 侧的调用方通过安全 MCP 隧道调用这些标签,而实际的 HTTP 请求仍从客户环境内部、私有服务附近发起。

关键约束在于,标签并不是通用网络桥梁。调用始终受到客户管理的目标注册、允许使用的方法、响应大小限制、超时、重定向行为和隧道访问控制的约束。这样,获准运行的 OpenAI 工作流就能通过受控通路访问客户的私有 API,而无须客户开放入站网络访问,也无须赋予 OpenAI 类似 VPN 的网络身份。

资源