把网页 ChatGPT 变成本地开发助手:DevSpace 部署与 Windows GUI 启动器实战

从 DevSpace 的 MCP 工作原理开始,带你完成本地部署、安全授权和 Windows GUI 启动器设计,并提供一段可直接交给 AI Agent 执行的复现任务书。

AI Agent ChatGPT DevSpace MCP Windows
浏览 650
把网页 ChatGPT 变成本地开发助手:DevSpace 部署与 Windows GUI 启动器实战封面

很多人已经习惯在 Codex、Claude Code 或本地 IDE 里让 AI Agent 处理代码,但网页端 ChatGPT 默认并不能直接读取你电脑里的项目,也不能直接帮你运行本地命令。DevSpace 解决的就是这条链路:在你的电脑上启动一个自托管 MCP Server,只把你允许的项目目录开放给 ChatGPT,然后通过 Owner password 审批连接。

这篇教程的目标不是简单翻译 DevSpace 官方 README,而是让你完成两件事:

  • 在本机部署 DevSpace,让网页端 ChatGPT 能安全连接指定的本地项目目录。
  • 让你的 AI Agent 根据本文任务书,开发一个类似的 Windows GUI 启动器,把启动、停止、状态、MCP URL、Owner Token 和授权目录维护都放进一个窗口。

如果你只想手工部署,可以按前半部分操作;如果你想让自己的 AI Agent 直接帮你复现,请重点复制后面的“AI Agent 执行任务书”。

DevSpace 官方连接效果示意
DevSpace 官方连接效果示意

DevSpace 到底解决什么问题

DevSpace 是一个自托管 MCP Server。它运行在你自己的电脑上,把本地项目目录、文件读写、搜索、命令执行等能力,以 MCP 工具的形式提供给 ChatGPT 或其他支持 MCP 的客户端。

你可以把它理解成一条受控通道:

DevSpace MCP 工作流
DevSpace MCP 工作流

这条链路里有几个关键点:

  • DevSpace 只应该运行在你信任的电脑上。
  • allowedRoots 决定 ChatGPT 可以打开哪些本地目录,必须尽量收窄。
  • Owner password 是审批连接用的密码,保存在 ~/.devspace/auth.json,不要发给别人。
  • publicBaseUrl 是公网 HTTPS 根地址,配置时不要带 /mcp
  • MCP 客户端里填写的才是完整地址,例如 https://mcp.example.com/mcp

这也是为什么我建议做一个 GUI 启动器:命令行流程本身不复杂,但用户很容易把公网地址、/mcp、授权目录和 token 搞混。GUI 的价值不是替代 DevSpace,而是把危险步骤做得更可见、更可控。

准备环境

截至 2026-07-05,DevSpace 官方仓库的安装说明要求 Node >=22.19 <27。如果你后续执行时官方版本有变化,以官方仓库 README 和 setup 文档为准。

建议先准备这些环境:

项目用途检查方式
Node 22 LTS运行 DevSpace CLInode --version
npm安装 @waishnav/devspacenpm --version
Git支持仓库识别、worktree 等能力git --version
Git Bash 或 WSLDevSpace 在 Windows 上需要 Bash 兼容 shellwhere.exe bashGet-Command bash
.NET 8 SDK开发 Windows WPF GUI 启动器dotnet --info
HTTPS Tunnel让网页端 ChatGPT 能访问本机 7676 端口Cloudflare Tunnel、ngrok、Pinggy、Tailscale Funnel 等

Windows 用户要特别注意:DevSpace 官方文档说明,只有 PowerShell 或 cmd.exe 还不够,Windows 下建议安装 Git Bash 或使用 WSL。如果你只部署 DevSpace,不开发 GUI,可以暂时不装 .NET SDK;如果要让 AI Agent 复现本文的 Windows GUI 启动器,就必须准备 .NET 8 SDK。

手动部署 DevSpace

1. 安装 DevSpace CLI

可以全局安装:

npm install -g @waishnav/devspace

也可以不全局安装,后续都用 npx

npx @waishnav/devspace init
npx @waishnav/devspace serve

如果你的 AI Agent 要长期维护这条链路,全局安装更方便;如果只是临时测试,npx 更干净。

2. 初始化配置

运行:

devspace init

初始化时主要会问三个问题。

第一,允许 ChatGPT 打开的本地目录。不要填整盘,不要填用户根目录。推荐填具体项目集合目录,例如:

D:\work\ai-projects,D:\work\open-source-labs

第二,本地端口。默认用 7676 即可。

第三,公网 HTTPS 根地址。这里填的是 origin,不带 /mcp

https://mcp.example.com

MCP 客户端里再填写完整地址:

https://mcp.example.com/mcp

这个区别非常重要。很多连接失败都来自把 /mcp 写进了 publicBaseUrl

3. 启动服务

如果已经完成初始化,可以直接启动:

devspace serve

如果你使用的是临时隧道,每次地址会变化,也可以只在本次启动时覆盖公网地址:

$env:DEVSPACE_PUBLIC_BASE_URL="https://new-tunnel.example.com"
devspace serve

4. 验证端点

本机先检查:

curl http://127.0.0.1:7676/.well-known/oauth-authorization-server
curl http://127.0.0.1:7676/.well-known/oauth-protected-resource/mcp

公网再检查:

curl https://mcp.example.com/.well-known/oauth-authorization-server
curl https://mcp.example.com/.well-known/oauth-protected-resource/mcp

如果这几个地址都能返回 JSON,而不是 404、502 或连接失败,再去 ChatGPT 里添加 MCP 地址。

在网页 ChatGPT 中添加 DevSpace MCP 应用

本地服务和公网端点都验证通过后,还需要在网页端 ChatGPT 里把 DevSpace 添加成一个 MCP 应用。这个步骤对新手很关键:DevSpace 服务启动成功,不等于 ChatGPT 已经知道它在哪里。

1. 从账户菜单进入设置

在网页 ChatGPT 左下角点击头像或账户菜单,进入 设置

网页 ChatGPT 账户菜单中的设置入口
网页 ChatGPT 账户菜单中的设置入口

2. 进入应用,点击创建应用

在设置页左侧选择 应用。如果之前已经创建过 DevSpace,会在应用列表里看到它;如果是第一次配置,找到 高级设置 一行右侧的 创建应用

网页 ChatGPT 应用设置中的创建应用入口
网页 ChatGPT 应用设置中的创建应用入口

3. 填写新应用信息

新应用表单里建议这样填写:

  • 名称:写 DevSpace本地项目助手
  • 描述:简单说明用途,例如 连接本机 DevSpace MCP 服务,用于访问已授权的本地项目目录
  • 连接:选择 服务器 URI,填写完整 MCP 地址,例如 https://mcp.example.com/mcp
  • 身份验证:选择 OAuth
  • 勾选风险确认:确认你理解自定义 MCP 服务器的风险。
  • 点击 创建
网页 ChatGPT 新应用表单
网页 ChatGPT 新应用表单

这里最容易出错的是地址:

  • DevSpace config.json 里的 publicBaseUrl 只能写根地址,例如 https://mcp.example.com
  • ChatGPT 新应用里的服务器 URI 必须写完整 MCP 地址,例如 https://mcp.example.com/mcp
  • 不要把 https://mcp.example.com 直接填到 ChatGPT 的服务器 URI 里,也不要把 /mcp 写进 DevSpace 的 publicBaseUrl

创建完成后,ChatGPT 连接 DevSpace 时会打开 Owner password 审批页。输入 devspace init 输出的 Owner password,或从 ~/.devspace/auth.json 中查看。这个密码只用于你本人审批连接,不要截图公开,也不要写进教程、代码仓库或共享文档。

如果 创建 按钮是灰色,优先检查三件事:名称是否填写、服务器 URI 是否以 https:// 开头并以 /mcp 结尾、风险确认复选框是否已勾选。

为什么要做 Windows GUI 启动器

命令行可以完成全部工作,但对很多普通用户来说,真正麻烦的是“运行状态不可见”。他们不知道服务是否启动,不知道当前 MCP URL 是什么,也不知道 Owner password 在哪里。

一个实用的 GUI 启动器至少要覆盖这些能力:

Windows GUI 启动器结构示意
Windows GUI 启动器结构示意
  • 启动、停止、重启 DevSpace。
  • 显示服务状态、端口、启动时间。
  • 显示并复制 publicMcpUrl
  • 显示并复制 Owner Token。
  • 添加、删除、保存 allowedRoots
  • 打开 config.jsonauth.jsonwebgpt-session.json 和日志目录。
  • 启动时不冻结界面,后台轮询健康端点。

这类 GUI 不需要做成复杂平台。第一版用 .NET 8 + WPF 就够了,重点是把危险配置做清楚,把状态反馈做好。

给 AI Agent 的完整执行任务书

下面这一段可以直接复制给你自己的 AI Agent。建议先让 Agent 只做本机部署和 GUI 开发,不要一开始就改系统服务、注册表或开机自启动。

你是我的本机开发助手。请帮我在当前 Windows 电脑上部署 @waishnav/devspace,并开发一个 Windows GUI 启动器,用来管理 DevSpace 的启动、停止、状态、MCP URL、Owner Token 和 allowedRoots。

执行方式:
- 必须分阶段执行:环境预检 -> 等待用户确认安装/配置 -> 部署 DevSpace -> 等待用户提供或确认公网 HTTPS 根地址 -> 开发 GUI -> 验收。
- 涉及安装全局 npm 包、安装 .NET SDK、配置公网隧道、修改系统服务、设置开机自启动、停止未知进程或产生费用的动作,都必须先说明影响并等待我确认。
- 如果当前机器没有公网 HTTPS 根地址,只能给出 Cloudflare Tunnel、ngrok、Pinggy、Tailscale Funnel 或反向代理的选择建议,不能替我注册账号、开通付费服务或擅自配置永久域名。

目标:
1. 部署 DevSpace,让网页端 ChatGPT 或其他 MCP 客户端可以通过公网 HTTPS /mcp 地址访问本机 DevSpace。
2. 只允许 MCP 客户端访问我明确授权的本地项目目录,不允许授权 C:\、D:\、用户目录根或整盘。
3. 开发一个 .NET 8 + WPF GUI 程序,降低普通用户使用 DevSpace 的操作难度。
4. 不输出、上传或泄露 auth.json、Owner Token、真实公网域名、真实项目路径中的敏感信息。

执行前必须先做环境检查:
- 执行 node --version,确认 Node 满足 DevSpace 官方当前要求,优先使用 Node 22 LTS。
- 执行 npm --version,确认 npm 可用。
- 执行 git --version,确认 Git 可用。
- 执行 `where.exe bash` 或 `Get-Command bash -ErrorAction SilentlyContinue`,确认 Windows 上有 Bash 兼容 shell。
- 执行 npm view @waishnav/devspace version,确认当前最新版本。
- 执行 `dotnet --info`,确认已安装 .NET 8 SDK;如果没有,只能提示用户安装,不能擅自安装。
- 确认用户已经准备一个公网 HTTPS 根地址,例如 `https://mcp.example.com`。如果没有公网地址,停止部署并向用户说明下一步选择。
- 如果环境缺失,先列出缺失项和安装建议,等待我确认,不要直接安装大依赖。

DevSpace 部署要求:
- 推荐全局安装:npm install -g @waishnav/devspace。
- 如果我不想全局安装,则使用 npx @waishnav/devspace。
- 配置文件目录使用默认 ~/.devspace。
- config.json 至少包含:host、port、allowedRoots、publicBaseUrl。
- auth.json 至少包含:ownerToken。
- ownerToken 必须随机生成,长度足够,不要写死简单密码。
- publicBaseUrl 只能是 https://mcp.example.com 这种根地址,不能带 /mcp。
- 如果用户没有提供 publicBaseUrl,脚本必须停止并提示用户,不要自动生成假地址,不要自动申请公网隧道。
- MCP 客户端里使用的地址才是 https://mcp.example.com/mcp。
- 本地服务端口默认使用 7676。

建议生成两个 PowerShell 脚本:
1. start-devspace-webgpt.ps1
   - 读取或创建 ~/.devspace/config.json。
   - 读取或创建 ~/.devspace/auth.json。
   - 保留已有 allowedRoots,不要擅自覆盖。
   - 检查 7676 端口,如果旧进程仍在监听,只能在确认它来自 `webgpt-session.json` 记录、`devspace.cmd`、`@waishnav/devspace` 或命令行明确包含 `devspace serve` 时停止;无法确认时必须提示用户手动处理。
   - 启动 devspace serve。
   - 轮询 http://127.0.0.1:7676/.well-known/oauth-authorization-server。
   - 成功后写入 ~/.devspace/runtime/webgpt-session.json,记录 startedAt、allowedRoots、port、publicBaseUrl、publicMcpUrl、authPath、devspacePid、stdout/stderr 日志路径。
2. stop-devspace-webgpt.ps1
   - 读取 ~/.devspace/runtime/webgpt-session.json。
   - 只停止 `webgpt-session.json` 记录中的 DevSpace 进程,或能明确识别为 `devspace.cmd` / `@waishnav/devspace` / `devspace serve` 的 7676 监听进程。
   - 不删除 config.json、auth.json、allowedRoots。
   - 如果 7676 被未知程序占用,停止并提示用户,不要强杀未知进程。

GUI 程序要求:
- 技术栈:.NET 8 + WPF。
- 项目名:DevSpaceGui。
- 主窗口标题:DevSpace 本地控制台。
- 主窗口至少包含 5 个区域:
  1. 服务状态:显示运行中、未运行、启动中、最近启动时间、端口。
  2. 连接信息:显示 publicBaseUrl、publicMcpUrl,并提供复制 MCP URL 按钮。
  3. 授权信息:显示 Owner Token,并提供复制密码按钮和打开 auth.json 按钮。
  4. 允许访问的目录:ListBox 展示 allowedRoots,提供添加目录、删除选中、保存配置、保存并重启。
  5. 辅助操作和日志:打开 config.json、session 文件、日志目录,并显示操作日志。
- 添加目录时使用 FolderBrowserDialog。
- 用户添加目录后,在保存前不能被自动刷新覆盖。
- 启动和重启必须后台执行,不能冻结 UI。
- GUI 每 3 秒刷新一次状态,但不能覆盖未保存的 allowedRoots。
- 重新构建前必须提醒用户关闭正在运行的 DevSpaceGui.exe,否则 apphost 可能被锁定,导致新代码没有真正编译进 exe。
- 状态判断优先使用本地健康端点,而不是只看 PID。

核心实现建议:
- MainWindow.xaml 负责界面布局。
- MainWindow.xaml.cs 负责状态读取、脚本启动、健康检查和按钮事件。
- 用 DispatcherTimer 做状态刷新。
- 用 HttpClient 请求 http://127.0.0.1:7676/.well-known/oauth-authorization-server 判断服务是否就绪。
- 用 System.Text.Json 读写 config.json、auth.json、webgpt-session.json。
- 用 ProcessStartInfo 后台启动 PowerShell 脚本,CreateNoWindow=true。
- 启动服务时设置 _isStartingService 标记,服务就绪后立即清除忙碌状态。

参考实现行为:
- `LaunchScriptDetached(...)` 只负责后台发起启动脚本,不同步等待 PowerShell 结束。
- `WaitForServiceReadyAsync(...)` 在约 45 秒内轮询健康端点,成功后立刻刷新状态并解除按钮锁定。
- `DispatcherTimer` 每 3 秒刷新一次状态,但 `_allowedRootsDirty=true` 时不能重置列表。
- `ProbeLocalServerAsync(...)` 以 `http://127.0.0.1:7676/.well-known/oauth-authorization-server` 是否可访问作为主要运行状态依据。
- `webgpt-session.json` 是运行期事实记录,优先用它显示端口、publicMcpUrl、日志路径和进程 ID。
- 如果启动脚本失败,GUI 要显示一行友好错误,并提示查看 stdout/stderr 日志。

安全规则:
- 不允许把 C:\、D:\、用户目录根、桌面根目录直接加入 allowedRoots。
- 不允许把 Owner Token 写进教程、日志、截图或提交到 Git。
- 不允许把真实公网域名写进公开教程截图。
- 不允许开启 DEVSPACE_ALLOWED_HOSTS=*,除非我明确说只是本地调试。
- 不允许启用包含密钥的 shell 命令日志。
- 不允许自动配置永久 Cloudflare 子域名;如果用户需要固定地址,只能说明方案并等待用户单独确认。

验收标准:
- `dotnet --info` 能看到 .NET 8 SDK。
- `dotnet build` 可以通过。
- GUI 打开后不会卡死。
- 点击“启动服务”后,状态能从启动中变成运行中。
- 本机端点 http://127.0.0.1:7676/.well-known/oauth-authorization-server 可以返回内容。
- GUI 可以复制 publicMcpUrl。
- GUI 可以复制 Owner Token。
- 添加 allowedRoots 后点击保存,config.json 中能看到新增目录。
- 保存并重启后,新增 allowedRoots 仍然存在。
- 停止服务后,状态能正确显示未运行。
- 所有截图和日志都不能出现真实 token 或真实公网域名。

完成后请给我:
- 文件清单。
- 如何启动 GUI。
- 如何把 MCP URL 填到 ChatGPT。
- 常见故障和处理方式。
- 你执行过的验证命令和结果。

这段任务书故意写得比较细。原因是 DevSpace 一旦接通,就等于把一部分本机开发能力交给网页端 AI Agent。越是自动化,越要把边界说清楚。

AI Agent 执行任务拆解
AI Agent 执行任务拆解

固定域名是不是必须做

不是必须。

如果你只是测试,可以用临时隧道地址。缺点是每次地址变化后,都需要更新 publicBaseUrl,然后在 MCP 客户端里重新确认连接。

如果你希望长期使用,可以给 DevSpace 准备一个固定 HTTPS 子域名,让它稳定转发到:

http://127.0.0.1:7676

但这属于进阶运维配置,不是本文主流程。你只需要记住两个规则:

  • DevSpace 的 publicBaseUrl 填固定根地址,例如 https://mcp.example.com
  • ChatGPT MCP 客户端填完整 /mcp 地址,例如 https://mcp.example.com/mcp

不要把你的真实域名、真实 token 或真实项目路径写进公开教程。

常见问题

为什么服务启动了,ChatGPT 还是连不上

先检查公网地址是不是能访问 .well-known 端点。如果本机能访问,公网不能访问,通常是 Tunnel 或反向代理没有指向 http://127.0.0.1:7676

为什么提示 public URL 或 Host 不对

检查 publicBaseUrl 是否误写了 /mcp。配置里应该是:

https://mcp.example.com

客户端里才是:

https://mcp.example.com/mcp

为什么 Windows 下命令执行失败

DevSpace 的 shell 执行需要 Bash 兼容环境。安装 Git for Windows 后,通常会带 Git Bash。只有 PowerShell 或 cmd.exe 不够。

为什么 workspace path rejected

你让 ChatGPT 打开的项目路径不在 allowedRoots 下。先在 GUI 里添加正确目录,保存并重启,再让 ChatGPT 重新打开 workspace。

为什么要避免授权整盘

DevSpace 的文件工具会限制在授权目录里,但 shell 命令本质上是本机命令,能力很强。你应该把 MCP 客户端当成一个被授权的开发伙伴,而不是普通网页访客。授权目录越窄,风险越可控。

结果验收清单

完成部署和 GUI 后,用这份清单验收:

  • [ ] node --version 满足 DevSpace 官方当前要求。
  • [ ] dotnet --info 能看到 .NET 8 SDK。
  • [ ] Windows 下 where.exe bashGet-Command bash 能找到 Bash。
  • [ ] devspace doctor 没有关键错误。
  • [ ] 本机 7676 端口健康端点可访问。
  • [ ] 公网 HTTPS .well-known 端点可访问。
  • [ ] MCP 客户端填写的是 /mcp 完整地址。
  • [ ] publicBaseUrl 不带 /mcp
  • [ ] allowedRoots 只包含具体项目目录。
  • [ ] auth.json 没有被提交、截图或分享。
  • [ ] GUI 启动、停止、保存配置、保存并重启都正常。
  • [ ] 未知程序占用 7676 时,脚本不会直接强杀。
  • [ ] 重新构建 GUI 前,已关闭正在运行的 DevSpaceGui.exe。
  • [ ] ChatGPT 可以打开授权目录里的测试项目,但打不开未授权目录。

参考资料

650