For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
主导航

安全 MCP 隧道

将私有 MCP 服务器连接到受支持的 OpenAI 产品,无需将服务器暴露到公共互联网。

安全 MCP 隧道让您无需开放防火墙入站端口,也无需将私有 MCP 服务器暴露到公共互联网,即可将其连接到受支持的 OpenAI 产品。在已经能够访问您的 MCP 服务器的网络内运行 tunnel-client;它会向 OpenAI 建立出站 HTTPS 连接,拉取排队的 MCP 任务,在本地转发请求,并通过同一条隧道返回响应。

安全 MCP 隧道支持私有 MCP 连接,包括开发者模式下的 测试。它不支持公开插件的提交或分发。公开 插件需要稳定且可通过公共互联网访问的 HTTPS MCP 端点。如果 MCP 服务器必须保持私有,请提供一个公开的 HTTPS 代理,将请求 转发到该服务器。有关端点 和身份验证要求,请参阅公开插件提交

什么是 MCP 隧道?

MCP 隧道是从您网络内的主机到 OpenAI 托管的 MCP 端点的仅出站连接。如果您的 MCP 服务器是私有服务器、部署在本地或位于防火墙后,而 ChatGPT、Codex、Responses API 或其他受支持的 OpenAI 产品界面仍需要调用它,就可以使用 MCP 隧道。

安全 MCP 隧道在保持 MCP 服务器私有的同时,为受支持的 OpenAI 产品提供常规的 MCP 请求路径。tunnel-client 通过轮询从 OpenAI 获取任务,在本地转发 MCP 请求,并通过同一条隧道返回响应。

安全 MCP 隧道的适用场景

  • 您的 MCP 服务器运行在私有网络、本地基础设施或开发者计算机上,或受现有访问控制保护。
  • 您希望 ChatGPT、Codex、Responses API 或其他受支持的 OpenAI 产品界面使用该 MCP 服务器,而无需将其公开。
  • 您的网络允许运行 tunnel-client 的主机默认向 api.openai.com:443 发起出站 HTTPS 请求,或在配置了控制平面 mTLS 时向 mtls.api.openai.com:443 发起此类请求,并且允许该主机访问私有 MCP 服务器。
  • 请先阅读 MCP 服务器指南,了解 MCP 的基本概念。

工作原理

  1. 在平台隧道设置中创建或管理由 OpenAI 托管的 MCP 隧道端点。
  2. 在能够访问您的私有 MCP 服务器的网络内运行 tunnel-client
  3. tunnel-client 配置隧道标识和私有 MCP 服务器地址。
  4. OpenAI 产品向 OpenAI 托管的隧道端点发送 MCP 请求。
  5. tunnel-client 通过长轮询获取排队的任务,将每个 JSON-RPC 请求转发到私有 MCP 服务器,再通过隧道回传响应。

私有 MCP 服务器无需设置面向公网的监听器。OpenAI 托管的端点为受支持的产品提供常规的 MCP 请求路径,而网络连接始终从您的网络边界内发起。当连接器请求流式结果时,隧道可以转发过程中的服务器发送事件。

OpenAI 产品调用 OpenAI 托管的隧道端点;tunnel-client 通过长轮询获取排队的任务,并通过同一条 隧道返回 MCP 响应。

开始之前

您需要:

  • 平台隧道设置获取的 tunnel_id
  • tunnel-client 在运行时使用的 API 密钥。
  • 一个可供 tunnel-client 从您的网络内部通过 stdio 或 HTTP 访问的 MCP 服务器。

权限与访问

平台隧道权限与 ChatGPT 开发者模式的访问权限相互独立:

  • 创建或编辑隧道需要隧道的 读取管理权限。
  • 运行 tunnel-client 或在创建应用时选择隧道,需要隧道的 读取使用权限。
  • 隧道权限的适用范围是平台组织。隧道角色由平台组织所有者或 RBAC 管理员授予。
  • ChatGPT 开发者模式是一项独立的工作空间权限。对于 Enterprise/Edu,工作空间管理员先授予开发者模式的访问权限,用户随后在 设置 → 安全与登录中启用该模式。有关各套餐的具体政策,请参阅帮助中心的开发者模式文章

请向目标 ChatGPT 工作空间的管理员申请开发者模式的访问权限,并向目标平台组织的所有者或 RBAC 管理员申请隧道权限。

将隧道与正确的组织和工作空间关联

一条隧道可以关联一个或多个平台组织或 ChatGPT 工作空间。通过这些关联,指定应允许在哪些 OpenAI 上下文中查找或使用该隧道。

  • 关联拥有或管理该隧道的平台组织。
  • 关联需要在创建应用时列出该隧道的 ChatGPT 工作空间。
  • 如果 Codex、Responses API 或其他受支持的产品将从另一个平台组织调用私有 MCP 服务器,请也关联该组织。
  • tunnel-client 使用相同的 tunnel_id;添加组织或工作空间不会创建第二条隧道,也不会更改私有 MCP 服务器端点。

对于个人账户,请使用属于该账户的个人平台组织。进行 ChatGPT 和 Codex 测试时,请将隧道与目标 ChatGPT 工作空间以及 Codex 将使用的平台组织关联。仅关联个人平台组织的隧道不会自动显示在 Enterprise/Edu 工作空间中。

如果平台组织与 ChatGPT 工作空间已经建立关联,您可以在平台隧道设置中添加缺少的组织或工作空间。如果无法自动验证您的企业配置,例如平台组织没有对应的 ChatGPT 工作空间,请联系您的 OpenAI 客户团队,针对应使用该隧道的企业账户映射,申请经审查的手动关联例外。

网络要求

tunnel-client 无需接受来自互联网的入站访问。它需要能够通过出站 HTTPS 连接 OpenAI,并从本地访问私有 MCP 服务器:

来源目标用途
运行 tunnel-client 的主机通过 HTTPS 访问 api.openai.com:443 上的 /v1/tunnel/*默认情况下的轮询和响应回传。
运行 tunnel-client 的主机通过 HTTPS 访问 mtls.api.openai.com:443 上的 /v1/tunnel/*配置了控制平面 mTLS 时的轮询和响应回传。
运行 tunnel-client 的主机配置的 stdio 命令或 MCP 服务器 URL从您的网络内部转发 MCP 请求。

设置 tunnel-client

打开平台隧道设置,然后使用其中的下载链接,或从 openai/tunnel-client 获取最新公开发布的 tunnel-client 版本。请在操作手册中使用指向最新版本的 URL,而不要硬编码某个特定版本的 URL。

如果您已有二进制文件,请先运行 tunnel-client help quickstart。对于已命名的本地 stdio 配置方案,请使用:

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

对于 HTTP MCP 服务器,请使用 --mcp-server-url https://mcp.internal.example.com/mcp 替代 --mcp-command

创建或测试应用期间,请确保 tunnel-client run ... 正常运行。应用发现和 MCP 工具调用依赖于正在运行的客户端。

在通过 ChatGPT、Codex 或 API 流程进行测试之前,您可以在 /ui 的本地管理界面中查看 正在运行的客户端是否正常、就绪 且已连接。

选择 tunnel-client 的运行位置

请在已有权限访问私有 MCP 服务器的同一信任边界内运行 tunnel-client。常见的部署方式包括:

  • Kubernetes 边车容器: 在同一个 Pod 中,将 tunnel-client 与 MCP 服务器一同运行,并通过 localhost 连接。
  • 专用 Kubernetes 部署: 如果已可通过私有 Service 访问 MCP 服务器,请单独运行 tunnel-client
  • 虚拟机或 systemd 服务: 在可通过私有网络访问 MCP 服务器的主机上运行 tunnel-client

从 ChatGPT 连接

前往 ChatGPT 插件,选择加号按钮以创建开发者模式应用,然后在 连接下选择 隧道 。当 ChatGPT 列出可用隧道时,选择其中一个;如果您已有有效的 tunnel_id,也可以将其粘贴进去。

如果隧道未在 ChatGPT 中显示,请确认该隧道已关联到目标 ChatGPT 工作空间,而不只是平台组织,并确认应用创建者拥有隧道的 读取使用权限。

从 Responses API 连接

在 MCP 工具定义中,将隧道标识符作为 tunnel_id 传入。不要将 OpenAI 托管的隧道端点作为 server_url 传入;只有 Responses API 可以直接访问的 MCP 服务器才应使用 server_url

在 Responses API 中使用安全 MCP 隧道
curl https://api.openai.com/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "gpt-6-astra",
    "input": "Use the private MCP server to answer my request.",
    "tools": [
      {
        "type": "mcp",
        "server_label": "private_mcp",
        "tunnel_id": "tunnel_0123456789abcdef0123456789abcdef"
      }
    ]
  }'

安全与网络

私有 MCP 服务器始终位于客户控制的环境内部。 tunnel-client 使用运行时 API 密钥,通过出站 HTTPS 连接 OpenAI, 并可按需使用可选的控制平面 mTLS。

  • MCP 服务器地址保持私有,仅在 tunnel-client 运行的环境内部使用。
  • tunnel-client 向 OpenAI 隧道控制平面进行身份验证;受支持的 OpenAI 产品使用 OpenAI 托管的隧道端点。
  • 隧道访问遵循现有的组织和工作空间上下文,不会引入单独的公共入站访问路径。
  • tunnel-client 支持企业网络需求,例如出站代理、自定义 CA 证书包、控制平面客户端证书以及 MCP 端的 mTLS

日志记录边界

安全 MCP 隧道将隧道传输与产品的应用级日志记录分开处理:

  • 隧道路径不会将隧道控制平面身份验证、长轮询及响应流量,以及单个隧道传输请求作为 ChatGPT 合规日志平台的应用事件发出。
  • 隧道元数据变更通过 API 平台的审计日志功能提供,事件类型为 tunnel.createdtunnel.updatedtunnel.deleted
  • 当 ChatGPT 通过安全 MCP 隧道访问自定义应用时,隧道仍仅作为传输路径。应用路径仍采用常规的应用级合规日志记录,包括应用调用日志,以及关联或取消关联应用时生成的 APP_AUTH_LOG 等应用身份验证生命周期日志。

高级:已列入允许列表的 HTTP 调用

安全 MCP 隧道还可支持受支持的智能体或 API 流程向客户网络发起范围严格受限的 HTTP 调用。tunnel-client 内置了名为 Harpoon 的 MCP 服务器,可按标签提供已配置的 HTTP 目标,让调用方通过隧道调用这些目标,同时对请求和响应施加明确限制。

如果您需要访问少量私有 REST 端点,同时又不将其公开,可使用此功能。Harpoon 并非通用代理:调用方不能任意选择主机,请求仅限于客户配置的目标和方法。

故障排除

  • 平台隧道设置中显示“需要隧道访问权限”: 隧道权限属于组织级别,而非项目级别。请选择目标平台组织,然后请组织所有者或 RBAC 管理员为您分配相应角色或将您加入相应群组:查看隧道需要 读取 权限;创建、编辑或删除隧道需要 读取管理 权限。如果没有匹配的角色,他们可以创建一个角色,将其分配给群组,再将您加入该群组。运行 tunnel-client 或在连接器设置中选择隧道还需要 使用 权限。新分配的角色最多需要 30 分钟才能传播生效。
  • 隧道在 ChatGPT 中不可见: 检查隧道是否包含目标 ChatGPT 工作空间,而不只是平台组织;然后检查连接器操作人员是否拥有隧道的 使用 权限。如果企业账户的工作空间无法自动关联,请联系您的 OpenAI 客户团队,通过经审查的手动关联覆盖操作完成关联。
  • 连接器发现或工具调用失败: 确认 tunnel-client run ... 仍在运行,然后重新运行 tunnel-client doctor --profile <name> --explain
  • 可以查看隧道,但无法编辑: 操作人员可能拥有隧道的 读取 权限,但没有隧道的 管理权限。
  • tunnel-client 提供 /healthz/readyz/metrics,以及位于 /ui 的本地管理界面。
  • 管理界面默认仅允许通过回环地址访问。只有在您明确需要让运维网络访问该界面时,才应开放远程访问。
  • 在通过 ChatGPT、Codex 或 API 流程进行测试之前,请使用这些接口和界面确认客户端运行正常、已就绪且正在轮询。
  • 如果客户端未连接,通过隧道发送的请求将失败,直到 tunnel-client 重新连接。
  • 原始 HTTP 日志记录默认关闭,导出用于支持排查的数据会经过脱敏处理。

OAuth

  • OAuth 发现可通过隧道路径进行,因此 MCP 服务器本身可以保持私有。
  • 隧道会保留面向浏览器的 OAuth 流程所需的上游授权服务器元数据。
  • 授权服务器本身不会自动通过隧道提供访问。如果从公共互联网和 tunnel-client 主机均无法访问授权服务器,即使 MCP 服务器可访问,OAuth 流程仍可能失败。

配置位置

  • 平台隧道设置中管理 OpenAI 托管的 MCP 隧道端点。
  • ChatGPT 插件中创建开发者模式应用时使用隧道。
  • 对于 Codex 或 API 流程,请使用支持该功能的产品界面提供的、通过隧道连接的 MCP 目标。

后续步骤

  • 平台隧道设置中创建或管理隧道。
  • 使用 tunnel-client doctor --profile <profile> --explain 验证您的 tunnel-client 配置方案。
  • ChatGPT 插件或您正在使用且支持该功能的 OpenAI 产品界面连接隧道。
经过脱敏处理的 OpenAI 平台隧道设置截图。

在平台隧道设置中创建和管理由 OpenAI 托管的 MCP 隧道端点。

经过脱敏处理的 ChatGPT 应用创建界面截图,其中已选择“隧道”。

将 ChatGPT 开发者模式应用连接到私有 MCP 服务器时,选择“隧道”。