AI Tools
教程8 分钟2026年8月27日作者:AIGCDev

如何用 DevSpace 让 ChatGPT Pro 网页版访问本地项目

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://&#x3C;device>.&#x3C;tailnet>.ts.net

此时只记录这个 origin,不要在末尾添加 /mcp--bg 会让 Funnel 配置在后台持续生效,具体行为见 Funnel CLI 文档

第 2 步:初始化 DevSpace

运行:

npx @waishnav/devspace@1.0.8 init

交互式配置中注意四处:

  1. 客户端选择 ChatGPT。
  2. Host 保持 127.0.0.1,端口保持 7676
  3. Project roots 只填目标项目的绝对路径,例如 /Users/yourname/Projects/example-app
  4. 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://&#x3C;device>.&#x3C;tailnet>.ts.net/healthz
curl -i https://&#x3C;device>.&#x3C;tailnet>.ts.net/mcp
curl -i https://&#x3C;device>.&#x3C;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 页面新增:

  1. 在 ChatGPT 网页版打开 Settings → Security and login,启用 Developer mode
  2. 打开 ChatGPT Plugins 页面
  3. 点击加号,新建一个 Plugin。
  4. 填写名称和说明;在 Connection 中填完整地址 https://<device>.<tailnet>.ts.net/mcp
  5. 创建后,检查页面发现的工具名称和说明是否来自 DevSpace。
  6. 按页面提示完成 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.mdCLAUDE.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_workspacereadwriteeditbash,因此连接本身支持修改文件和执行命令。ChatGPT 是否实际调用这些工具,仍取决于账号、工作区策略和确认流程。首次接入先用只读提示词验证目录边界;需要开放写入或命令执行时,应记住 allowedRoots 不是 Shell 沙箱,并用独立系统用户、容器或专门开发机隔离敏感项目。

chatgptdevspacemcplocal-developmenttailscale