微信开发者工具 × MCP:让 AI 直接操控模拟器
接入微信开发者工具内置的 MCP 接口,让 AI 自主调试小游戏、一键发体验版、点亮云端图库——附 5 个必踩的坑与解法。
实战来源:休闲小游戏《拼图暖时光》的全周期开发(2026-10:联调 → 修 bug → 体验版 → 云图库 → 提审)。 文中所有工具行为均基于实测,MCP 能力仍在快速迭代,请以官方文档为准。
引子
以前调试小程序/小游戏,流程是这样的:
改代码 → 切到开发者工具 → 点编译 → 盯模拟器 → 翻控制台 → 把现象描述给 AI → AI 猜 → 再改 → 再切窗口……
现在是这样:
我对 AI 说一句”图库滚动后点击命中偏移了”,它自己去翻控制台、读运行时数据、定位代码、改完、重新编译、再自己回归一遍——我只负责最后验收。
让这一切成立的,是微信开发者工具 Nightly 版内置的 MCP 接口(Model Context Protocol,AI 工具连接外部能力的标准协议)。这篇文章记录我把它接进 AI 助手、并跑完一个小游戏全周期的完整过程:怎么配、能干什么、踩了什么坑、哪些经验可以直接抄。
一、这是什么
开发者工具 Nightly 版在「设置 → 安全设置」里内置了一个 MCP 服务器。开启后,任何支持 MCP 协议的 AI 客户端都能通过标准协议调用开发者工具的能力:
- 截模拟器画面、读控制台日志
- 向小游戏画布发送触摸事件、向小程序页面派发交互
- 直接在小游戏运行时里执行 JS、读取运行时状态(这个能力价值最大,后面反复用到)
- 触发编译、上传体验版、推送真机预览
- 操作云开发(存储上传下载、云函数、数据库)
一句话:开发者工具从一个”人用的 GUI”,变成了 AI 的可编程调试台。
二、准备工作
| 前置项 | 说明 |
|---|---|
| 开发者工具版本 | Nightly 版(正式版是否已内置请以官方文档核实) |
| 服务端口 | 设置 → 安全 → 服务端口:开启 |
| MCP Token | 设置 → 安全 → MCP 接口处生成(与 CLI 访问令牌是两套,MCP 用自己的) |
| 自动化信任 | 「自动化接口打开工具时默认信任项目」:开启(省去反复确认) |
接入后先跑一遍自检,确认四件事再动手:
- MCP 连接可用(客户端里能看到
wechat-devtools的工具) - 登录态正常(调
check_wechatide_status,loginExpired=false) - 项目已导入(
project_list确认路径与 compileType:game / miniprogram) - 项目窗口已打开(
open_project_window,已有窗口会直接复用)
三、接入 AI 客户端(以及一个大坑)
开发者工具里点「复制 MCP 配置」,会给你这样一段:
{
"mcpServers": {
"wechat-devtools": {
"command": "wechatide",
"args": ["mcp", "--token=xxxxxxxx"]
}
}
}
坑来了:Windows 上 wechatide 实际是个 .cmd 批处理包装器(内部用 Electron-as-Node 跑 CLI),而 Node 的 spawn 直接调 .cmd 会失败——所以按原样粘贴,客户端里大概率表现为”服务器启动了但连不上”,或者干脆静默失败。
解法:用 cmd /c 包一层:
{
"mcpServers": {
"wechat-devtools": {
"command": "cmd",
"args": ["/c", "wechatide", "mcp", "--token=xxxxxxxx"]
}
}
}
写完配置后:在客户端里信任这个 MCP 服务器 → 完全退出并重启客户端(托盘退出,不是关窗口)→ 再调一次 check_wechatide_status,返回你的昵称 + loginExpired=false 就说明通了。
🔐 安全提醒:这个 Token 等同于你开发者工具的远程控制权。只放在本地配置文件里,不要截图外发;一旦泄露,去安全设置点「刷新」作废重生成。
四、工具箱速览
按”干什么用”分类,并标注我的使用优先级:
| 分类 | 工具 | 一句话说明 |
|---|---|---|
| 读状态(最可靠) | automation_evaluate | 在运行时执行任意 JS——我常用来读 wx.getStorageSync() 拿存档真值 |
| 看日志 | get_simulator_console | 对控制台缓冲区做 grep,grep -iE "error|fail|exception" 一把梭 |
| 看画面 | simulator_screenshot | 模拟器截图(JPEG 优化 / PNG 原始;写证据时用 path 存文件) |
| 交互(小游戏) | automation_game_action | 向画布发 tap / swipe / touchstart-move-end,优先用画布逻辑坐标 |
| 交互(小程序) | automation_element_action / automation_page_action | selector 定位元素、setData、callMethod(比坐标稳) |
| 构建 / 发布 | simulator_refresh / upload / auto_preview | 刷新编译 / 上传体验版 / 预览直接推到你微信上 |
| 项目管理 | project_list / open_project_window / close_project_window | 列项目、开/关项目窗口 |
| 云开发 | cloud_env_list / cloud_manage_storage / cloud_query_storage + 云函数与数据库系列 | 存储支持整个目录一次上传 |
| 异步确认 | polling_task_result | 上传/登录这类需要你在工具里点确认的操作,返回 taskId 后用它轮询结果 |
五、三个实战场景
场景 1:AI 自主调试循环(定位”点击选不中卡片”)
现象:图库里点一张卡片,选中的却是它下面那张。
AI 的操作序列:
automation_evaluate读存档:wx.getStorageSync('sgpt.pref')→ 拿到”最后选中 id”automation_game_actiontap 指定卡片(坐标从布局常量精确计算)- 再
evaluate复读存档 → 实锤:选中的确实是下方那张(坐标命中偏移) - 回源码定位:渲染的坐标系做了视口偏移,触摸命中没做——一行修复
- touch 一下源文件触发自动重编译 → 重跑同一交互 → evaluate 复读 → 修复确认
全程我只描述了现象。其中最关键的转折是:截图看起来”没变化”,其实是工具的内容去重机制在骗人;用 evaluate 读运行时数据才是不说谎的判定。
场景 2:发布体验版 + 推真机预览
AI 调 upload(版本号 + 描述)→ 包体积报告直接返回(747KB / 4MB 上限)
AI 调 auto_preview → 预览版直接出现在我微信里
我:掏出手机验收
传统流程里的”导出二维码 → 扫码 → 等待”被压缩成一条指令。
场景 3:云存储自动化(60 张图一次点亮)
小游戏做了”云端图库”:60 张图放云存储,客户端拉清单按需下载。接入 MCP 后:
- AI 组装本地待传目录(只含 webp 原图 + 缩略图,120 个文件 2.4MB;glob 排除样张目录,防同名 id 覆盖)
- 调
cloud_manage_storage目录上传 → 工具里弹确认框 → 我点一下确认 - AI 用
polling_task_result收到上传结果,从返回的临时 URL 里提取 bucket 标识,拼出cloud://<env>.<bucket>/<path>形式的 fileID - 生成图库清单 JSON → 上传 → 写进客户端配置(客户端合并按 id 去重,同 id 以包内图为准)
- 刷新模拟器 → 图库从 12 张变 60 张,48 个云端图片自动按需下载并落缓存——AI 再用 evaluate 数缓存文件数验证:恰好 48 个,分毫不差
六、实战坑与经验(这部分最值钱)
坑 1:触摸事件会”假成功”
窗口重开或游戏重编译后,automation_game_action 可能返回 success 但事件根本没送达(而 evaluate 通道一切正常——两个通道是独立的)。恢复手段是关掉再重开项目窗口,但时灵时不灵。
经验:交互类操作做完,永远用 evaluate 读一次状态确认。长交互任务的最佳分工是——人工动手操作,AI 用 evaluate 读数 + 截图存证。
坑 2:swipe 滑动”无效”
duration=0(默认)的 swipe 不产生中间 touchmove 事件——如果你的页面是自己监听 touchmove 做滚动的,就会”滑不动”。传 duration≥300 让它产生中间帧;还不行就拆成 touchstart → touchmove ×N → touchend 手动发。
坑 3:截图”看起来没变”
工具对连续截图有内容去重,两个不同状态可能被判 identical 而不返回新图。对策:optimize=false 出 PNG 原图、换 wait 时长;以及最重要的——别用截图做状态判定,用 evaluate。
坑 4:改了代码没生效
文件监听偶尔失灵。touch 一下入口源文件(追加一个空行)强制重编译,再从构建面板确认编译记录。
坑 5:坐标换算
模拟器视图尺寸会随窗口/模式变化(实测见过 379×819 → 363×785 → 289×625),“按截图像素换算坐标”的方案必然失准。画布逻辑坐标(从布局常量直接计算)才是稳定解;非要用 image 空间,必须用最新一张截图的 imageWidth/imageHeight。
经验总纲
截图会骗人、交互会装死、只有运行时数据不说谎。 把 evaluate 当判定真值,把其它工具当执行手段。
七、安全与纪律
- MCP Token 只存本地配置,不写入任何文档、代码注释或截图;泄露立即刷新作废
- AI 做”写操作”(上传 / 删除 / 发布)时工具会弹确认框——保留这个习惯,不要为了自动化把确认环节绕掉
- 调试用的临时开关(比如为了截图临时显示某个入口),用完必须复位并留档——否则下一次”一键上传”就把调试态带上线了
- 上传密钥 / 服务端密钥永不入库;AppID 可以提交
八、适合谁 / 目前局限
适合:小程序 / 小游戏开发者(尤其独立开发者和两三人小团队);想把”描述现象 → AI 修”升级成”AI 自查自修”的人;提审期需要批量验证(多机型截图、回归检查)的人。
局限(截至实测时点):
- 小游戏画布的触摸派发在窗口重载后偶尔断绑,需要重开项目窗口恢复(小程序的 selector 通道更成熟)
- 控制台是缓冲区快照,不是实时流
- 云函数 / 数据库工具偏管理向,复杂业务调试仍以常规手段为主
- 能力在快速迭代中,以官方文档为准
结语
这套组合最大的价值不是省了几次点击,而是把”调试”从人的串行劳动变成了 AI 的并行闭环:你把现象描述给 AI,它读数据、跑交互、定位代码、修复、回归、存档证据,最后把结论和证据一起交给你。
开发者工具把 MCP 接口官方内置进来,意味着这条路径是被官方支持的长期方向——值得现在就把它纳入你的工作流。
本文基于休闲小游戏《拼图暖时光》(Canvas 2D + TypeScript)的完整开发周期实测整理。