Tunnel Client实战:10分钟本地MCP接入ChatGPT
本文带你从零开始,使用 OpenAI 官方 tunnel-client 将本地 MCP 服务安全接入 ChatGPT。涵盖安装配置、隧道启动、插件验证等完整流程,并附带实战示例与常见踩坑提醒。学完后,你的本地 AI Agent 即可安全、低延迟地被 ChatGPT 调用,无需暴露公网端口。

Tunnel Client实战:10分钟本地MCP接入ChatGPT
你是不是也遇到过这种场景?本地跑着一个精心调教的 MCP Server,能处理代码、分析数据、甚至控制电脑,但就是想把它接到 ChatGPT 里使用。直接暴露端口风险太高,用第三方内网穿透又容易断连、延迟高。
OpenAI 官方开源的 tunnel-client 专为解决这个问题而生。这篇实战教程将带你用10分钟走完从安装到端到端验证的完整流程,让本地 MCP 服务安全、稳定地出现在 ChatGPT 的插件面板中。
为什么选择官方隧道方案
传统做法往往要在安全性和稳定性之间妥协:直连暴露端口容易招致扫描攻击,第三方隧道服务依赖外部基础设施且延迟不可控。tunnel-client 作为 OpenAI 官方实现,直接对接 Secure MCP Tunnel 基础设施,认证鉴权、加密传输、心跳保活全部托管。开发者只需专注自己的服务逻辑,无需操心网络穿透细节。
前置准备
动手前确保环境就绪:
- Go 1.21+ 运行环境(项目基于 Go 开发,编译依赖)
- 一个正在本地运行的 MCP Server(本教程以
localhost:3000为例) - OpenAI 开发者账号,且需具备 ChatGPT Plus 订阅或 API 访问权限
项目仓库:openai/tunnel-client(GitHub 433 Stars,Go 语言编写)
第一步:通过 Go 工具链安装
项目未提供预编译二进制文件,但 Go 生态的安装流程极为简洁。在你的终端执行:
bash
$ go install github.com/openai/tunnel-client@latest
$ which tunnel-client
/path/to/go/bin/tunnel-client
Go 的 install 命令会自动解析依赖、拉取源码并编译为当前系统架构的可执行文件,比手动 clone 仓库再执行 go build 更干净,也便于后续版本升级管理。安装完成后确认二进制文件已加入 PATH,即可进行下一步配置。
第二步:生成配置文件并填写关键参数
隧道客户端启动前需要明确三项信息:OpenAI 身份凭证、本地 MCP 服务地址、隧道唯一标识。执行初始化命令:
bash
$ tunnel-client init
Generated config at ~/.config/tunnel-client/config.yaml
用文本编辑器打开生成的配置文件,核心结构如下:
yaml
openai:
api_key: "sk-..."
organization_id: "org-..."
mcp_server:
url: "http://localhost:3000"
name: "my-local-agent"
配置时有三点务必核对:
api_key必须是目标组织的有效令牌,且该组织需已开通 MCP 隧道功能权限url直接指向本地服务根地址,不要拼接/chat、/completion等具体路由,客户端会在底层自动处理协议对接name字段会原样显示在 ChatGPT 插件列表中,建议使用纯英文命名,避免特殊字符导致前端渲染异常
第三步:启动隧道并验证连接
配置文件就位后,一条命令即可拉起隧道:
bash
$ tunnel-client start --config ~/.config/tunnel-client/config.yaml
2024/09/20 10:15:22 INFO Tunnel established id=mcpt-8f3a2b
2024/09/20 10:15:23 INFO Connected to MCP server at http://localhost:3000
终端输出 Tunnel established 和 Connected 标志隧道链路已打通。此时打开 ChatGPT 界面,依次进入 Settings → Plugins → Manage plugins,应能看到 my-local-agent 状态显示为 Connected,说明 OpenAI 云端已成功识别你的本地服务。
实战演练:接入天气查询服务
跑通基础流程后,我们用一个真实场景验证端到端调用链路。假设你本地有一个 FastAPI 编写的天气接口:
python
from fastapi import FastAPI
app = FastAPI()
@app.get("/weather")
def get_weather(city: str):
return {"city": city, "temp": 24}
服务监听在 localhost:8000。修改配置文件的 mcp_server.url 为 http://localhost:8000/weather,重启隧道。回到 ChatGPT 对话窗口输入:
"帮我查下深圳现在的天气"
配置无误时,GPT 会主动识别插件能力,向你的本地接口发起请求并返回结构化结果。全链路无需将服务部署到公网,典型往返延迟低于 50ms。
常见踩坑提醒
- 认证失败:确认
api_key所属组织已真正开通 Secure MCP Tunnel 权限,该功能早期处于测试阶段,部分账号可能默认未启用 - 连接闪断:隧道依赖本地服务持续存活,建议搭配
systemd、supervisor或pm2做进程守护,避免终端关闭导致服务中断 - 路由不匹配:若 MCP 服务挂载在子路径下(如
/api/v1/mcp),请在配置中完整书写路径,客户端不会自动补全或重写路由
下一步进阶方向
成功接入第一个服务后,可以尝试以下方向:
- 使用 Docker Compose 封装本地 MCP 服务与 tunnel-client,实现一键拉起整套环境
- 启用
--log-level debug参数输出详细通信日志,用于排查复杂的多轮交互问题 - 深入研读 MCP 协议规范,为服务扩展多模态输入或流式响应能力
将本地智能体安全接入大模型生态已是标准实践。跑通流程后,你可以在评论区留下 ✅ 交流使用体验。