把网页 ChatGPT 变成本地开发助手:DevSpace 部署与 Windows GUI 启动器实战
从 DevSpace 的 MCP 工作原理开始,带你完成本地部署、安全授权和 Windows GUI 启动器设计,并提供一段可直接交给 AI Agent 执行的复现任务书。
很多人已经习惯在 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 是一个自托管 MCP Server。它运行在你自己的电脑上,把本地项目目录、文件读写、搜索、命令执行等能力,以 MCP 工具的形式提供给 ChatGPT 或其他支持 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 CLI | node --version |
| npm | 安装 @waishnav/devspace | npm --version |
| Git | 支持仓库识别、worktree 等能力 | git --version |
| Git Bash 或 WSL | DevSpace 在 Windows 上需要 Bash 兼容 shell | where.exe bash 或 Get-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 左下角点击头像或账户菜单,进入 设置。

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

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

这里最容易出错的是地址:
- 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 启动器至少要覆盖这些能力:

- 启动、停止、重启 DevSpace。
- 显示服务状态、端口、启动时间。
- 显示并复制
publicMcpUrl。 - 显示并复制 Owner Token。
- 添加、删除、保存
allowedRoots。 - 打开
config.json、auth.json、webgpt-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。越是自动化,越要把边界说清楚。

固定域名是不是必须做
不是必须。
如果你只是测试,可以用临时隧道地址。缺点是每次地址变化后,都需要更新 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 bash或Get-Command bash能找到 Bash。 - [ ]
devspace doctor没有关键错误。 - [ ] 本机
7676端口健康端点可访问。 - [ ] 公网 HTTPS
.well-known端点可访问。 - [ ] MCP 客户端填写的是
/mcp完整地址。 - [ ]
publicBaseUrl不带/mcp。 - [ ]
allowedRoots只包含具体项目目录。 - [ ]
auth.json没有被提交、截图或分享。 - [ ] GUI 启动、停止、保存配置、保存并重启都正常。
- [ ] 未知程序占用 7676 时,脚本不会直接强杀。
- [ ] 重新构建 GUI 前,已关闭正在运行的 DevSpaceGui.exe。
- [ ] ChatGPT 可以打开授权目录里的测试项目,但打不开未授权目录。
参考资料
用 AI Agent 做可持续迭代的网页原型:React、SQLite 与项目规范入门
面向刚开始使用编码 Agent 的产品、设计与项目人员:从一个真实长期维护原型的经验和教训出发,用 React、Express 与 SQLite 做出可运行的需求评审台账,并用事实源文档、项目级技能和验证清单约束后续修改。
让 AI Agent 先读懂代码再动手:CodeGraph 与代码知识图谱实战
从 Token 消耗、调用链和影响范围出发,拆解 CodeGraph 的本地图谱原理,对比 Serena、Graphify 等工具,并以 Windows + Codex 为主线说明跨平台、多 Agent 的安全接入、验证、测量与风险控制流程。
用 AI Agent 从零生成网页原型:静态 HTML、Vue、React 怎么选,才能少返工、少烧 Token
先分清页面组件化与数据边界两条轴线,再比较静态 HTML、Vue、React、Mock、MSW 与 SQLite 的首次和长期 Token 成本,按原型生命周期选择更少返工的架构。