ChatGPT Pro 网页版不能直接打开你电脑上的项目目录。要让它访问本地代码,可以在电脑上运行 DevSpace,把指定项目开放为 MCP 工作区,再用 Tailscale Funnel 提供 ChatGPT 能连接的公网 HTTPS 地址。DevSpace 连接需要在 ChatGPT 网页版的 Plugins 页面新增,不是在 Settings 里创建 App。
最短路径是:在 DevSpace 中限制可访问的 Project roots,把本地端口 127.0.0.1:7676 通过 Funnel 转成 HTTPS 地址,然后开启 ChatGPT Developer mode,并把完整的 /mcp 地址填入 Plugins 页面。截至 2026 年 8 月 27 日,OpenAI 官方接入文档仍说明 Developer mode 是否可用取决于账号和工作区策略;账号中没有该选项时,这条路径暂时无法使用。
以下步骤以 macOS 和 DevSpace 1.0.8 为例。第一次接入先用测试仓库,不要直接开放含有密钥、客户资料或生产配置的项目。
先看清连接关系
ChatGPT Pro 网页版
│
│ HTTPS + OAuth
▼
https://<device>.<tailnet>.ts.net/mcp
│
│ Tailscale Funnel
▼
http://127.0.0.1:7676/mcp
│
│ DevSpace
▼
/Users/yourname/Projects/example-app
DevSpace 只在本机监听 127.0.0.1:7676,Funnel 负责提供公网 HTTPS 入口。这里不能用 Tailscale Serve 代替:Serve 只对 tailnet 内的设备开放,而 Funnel 面向公网。两者的区别见 Tailscale Funnel 文档。
准备环境
按照 DevSpace 1.0.8 的 Setup Guide,本机需要:
- Node.js
>=22.19 <27 - npm、Git 和 Bash
- 已登录的 Tailscale CLI
- ChatGPT Pro 网页版,并且账号中能看到 Developer mode
- 一个准备开放的项目绝对路径
截至 2026 年 8 月 27 日,Tailscale 仍将 Funnel 标为 beta,并要求 tailnet 已启用 MagicDNS。首次授权会创建有效的 HTTPS 证书并添加 Funnel 节点属性,但 MagicDNS 需要提前开启,具体要求见 Funnel 文档。
Funnel 的官方最低版本是 Tailscale 1.38.3,但 Tailscale 在 1.52 调整过 Serve 和 Funnel 的 CLI 语法。下文命令按 1.52 及以上版本编写;如果客户端更旧,建议先升级到当前稳定版,语法变化见 Funnel CLI 文档。
先确认命令都可用:
node --version
git --version
bash --version
tailscale version
第一次建议新建一个无敏感信息的测试仓库。允许目录应精确到项目本身,不要直接填写主目录或整个 Projects 目录。
第 1 步:启动 Tailscale Funnel
DevSpace 默认监听 127.0.0.1:7676。先让 Funnel 把公网请求转发到这个地址:
tailscale funnel --bg http://127.0.0.1:7676
如果是第一次在这台设备上启用 Funnel,终端会给出 Tailscale 管理页面的链接。打开链接并允许该设备使用 Funnel,然后再检查状态:
tailscale funnel status
命令会显示一个类似下面的公网地址:
https://<device>.<tailnet>.ts.net
此时只记录这个 origin,不要在末尾添加 /mcp。--bg 会让 Funnel 配置在后台持续生效,具体行为见 Funnel CLI 文档。
第 2 步:初始化 DevSpace
运行:
npx @waishnav/devspace@1.0.8 init
交互式配置中注意四处:
- 客户端选择 ChatGPT。
- Host 保持
127.0.0.1,端口保持7676。 - Project roots 只填目标项目的绝对路径,例如
/Users/yourname/Projects/example-app。 - Public base URL 填 Funnel 的 origin,例如
https://<device>.<tailnet>.ts.net,这里仍然不要加/mcp。
初始化会生成 Owner password。把它放进密码管理器,稍后只在 DevSpace 的 OAuth 授权页输入。
配置完成后运行诊断:
npx @waishnav/devspace@1.0.8 doctor
DevSpace 1.0.8 把常规配置保存在 ~/.devspace/config.json,认证信息保存在 ~/.devspace/auth.json。后者不能提交到仓库,也不要出现在截图或排错日志里。
第 3 步:启动服务并检查端点
在一个终端里启动 DevSpace:
npx @waishnav/devspace@1.0.8 serve
保持进程运行,再打开另一个终端执行:
curl -i http://127.0.0.1:7676/healthz
curl -i https://<device>.<tailnet>.ts.net/healthz
curl -i https://<device>.<tailnet>.ts.net/mcp
curl -i https://<device>.<tailnet>.ts.net/.well-known/oauth-protected-resource/mcp
四项结果应当是:
| 检查 | 预期结果 |
|---|---|
本地 /healthz |
200 |
公网 /healthz |
200 |
未带认证的公网 /mcp |
401 |
| OAuth protected-resource 元数据 | 200 和 JSON |
/mcp 返回 401 是正常的,说明匿名请求不能直接调用工具。OAuth discovery 地址可在 DevSpace 1.0.8 的 Configuration 文档中核对。
第 4 步:到 ChatGPT Plugins 页面新增连接
这一步分成两个页面。Settings 只负责打开开发者模式,DevSpace 连接要在网页版的 Plugins 页面新增:
- 在 ChatGPT 网页版打开 Settings → Security and login,启用 Developer mode。
- 打开 ChatGPT Plugins 页面。
- 点击加号,新建一个 Plugin。
- 填写名称和说明;在 Connection 中填完整地址
https://<device>.<tailnet>.ts.net/mcp。 - 创建后,检查页面发现的工具名称和说明是否来自 DevSpace。
- 按页面提示完成 OAuth 授权,在 DevSpace 授权页输入此前保存的 Owner password。
这也是 OpenAI 当前文档给出的接入顺序,详见 Connect your MCP server to ChatGPT。如果账号中没有 Developer mode,或者 Plugins 页面没有新增入口,应先检查账号与工作区策略,不要通过关闭 DevSpace 认证来绕过。
第 5 步:在新对话中打开项目
新建一个 ChatGPT 对话,从工具菜单加入刚才创建的 DevSpace 连接。第一次不要让它猜项目位置,直接给出绝对路径:
使用 DevSpace 打开下面的本地工作区:
/Users/yourname/Projects/example-app
先只读取,不修改文件,也不运行有副作用的命令。
如果根目录存在 AGENTS.md 或 CLAUDE.md,先读取它,然后告诉我:
1. 项目使用的技术栈;
2. 启动和测试命令;
3. 当前 git status;
4. 你实际读取了哪些文件。
DevSpace 会先用 open_workspace 打开项目,之后在同一对话里复用返回的 workspaceId。根目录中的 AGENTS.md 或 CLAUDE.md 也要等工作区打开后才会作为工具上下文返回,详见 1.0.8 的 ChatGPT coding workflow。
不用时关闭入口
DevSpace 提供的是远程访问本地开发机的能力,至少要守住下面几条边界:
- Project roots 只开放当前需要的项目。
- Owner password 只输入 DevSpace OAuth 页面,不放进聊天消息。
- 在 Plugins 页面核对 ChatGPT 实际发现了哪些工具;账号或工作区不允许的能力,以页面显示为准。
- 检查 Project roots 中的符号链接。DevSpace 的 #45记录过文件工具通过符号链接访问允许目录之外的位置;1.0.8 的路径判断实现仍按路径字符串检查,没有解析符号链接的真实目标。不要在允许目录内保留指向敏感位置的符号链接。
allowedRoots不是操作系统沙箱。Shell 命令仍以本地用户权限运行;敏感仓库应使用独立系统用户、容器或专门开发机。
不用时停止 DevSpace,并关闭 Funnel:
tailscale funnel --https=443 off
DevSpace 对目录、OAuth 和本地命令的具体约束见 1.0.8 的 Security Model。
接不上时从哪一层查
| 现象 | 优先检查 |
|---|---|
doctor 失败 |
Node、Git、Bash、Project roots 和 publicBaseUrl |
本地 /healthz 失败 |
DevSpace 进程是否仍在运行,端口 7676 是否被占用 |
本地 200,公网在 TLS/SSL 阶段失败 |
Funnel 状态、DNS、HTTPS 证书和 Tailscale 客户端版本;更新后重新执行 Funnel 命令 |
未授权 /mcp 不是 401 |
立即停止接入,检查 OAuth 与认证配置 |
| OAuth 地址仍指向 localhost | 把 publicBaseUrl 改为公网 origin,重启 DevSpace,在 Plugins 页面刷新连接后新建对话 |
| DevSpace 拒绝项目路径 | 提示词是否使用绝对路径,以及该路径是否位于 Project roots 内 |
| 已创建 Plugin,但新对话看不到工具 | 在工具菜单加入该连接;仍无工具时回到连接详情执行 Refresh,再新建对话 |
2026 年 8 月 26 日,本站在 macOS 上排查时遇到过这一情况:旧版 Tailscale 客户端下,本地健康检查正常,但公网地址在 TLS 阶段无法连接;升级到 Tailscale 1.102.3 并重新执行 tailscale funnel --bg http://127.0.0.1:7676 后,公网 /healthz 恢复为 200。
1.102.3 只是本次排错成功时使用的版本,不代表必须安装这个版本。遇到相同现象时,优先更新到当前稳定版,再按“本地服务 → Funnel → OAuth → ChatGPT”逐层检查。
判断是否接通时,先确认 Plugins 页面能看到 DevSpace 工具,新对话可以打开指定绝对路径;再直接输入 Project roots 之外的相邻目录,确认请求会被拒绝。最后一项只能检查普通路径配置,不能覆盖符号链接或 Shell 权限,也不能证明已经形成沙箱隔离。
常见问题
需要 OpenAI API Key 吗?
不需要自行配置 OpenAI Platform API Key。这里使用 ChatGPT 账号登录,并通过 DevSpace OAuth 授权本地 MCP 连接;DevSpace 初始化时生成的 Owner password 只用于它自己的授权页。
为什么不能直接填写 localhost?
ChatGPT 在云端运行,无法连接你电脑上的 127.0.0.1。OpenAI 要求 MCP 服务使用公网 HTTPS 地址,或者通过 Secure MCP Tunnel 连接;当前步骤采用 Tailscale Funnel 提供 HTTPS 地址,详见 OpenAI MCP 接入文档。
可以用 Tailscale Serve 代替 Funnel 吗?
不可以直接代替。Serve 只让 tailnet 内的设备访问本地服务,ChatGPT 云端不在你的 tailnet 中;Funnel 才会提供公网 HTTPS 入口。
Plugin 已创建,为什么新对话里看不到 DevSpace?
先在新对话的工具菜单中加入 DevSpace 连接。如果仍然看不到,回到 Plugins 页面打开该连接,确认 /mcp 地址无误后执行 Refresh,检查工具和元数据是否已经更新,再新建对话。只有刷新仍然失败时,才删除并重新创建连接。
ChatGPT 能直接修改本地文件吗?
DevSpace 1.0.8 默认的 minimal 模式会提供 open_workspace、read、write、edit 和 bash,因此连接本身支持修改文件和执行命令。ChatGPT 是否实际调用这些工具,仍取决于账号、工作区策略和确认流程。首次接入先用只读提示词验证目录边界;需要开放写入或命令执行时,应记住 allowedRoots 不是 Shell 沙箱,并用独立系统用户、容器或专门开发机隔离敏感项目。