← 知识库 / 技术

微信开发者工具 × 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 用自己的)
自动化信任「自动化接口打开工具时默认信任项目」:开启(省去反复确认)

接入后先跑一遍自检,确认四件事再动手:

  1. MCP 连接可用(客户端里能看到 wechat-devtools 的工具)
  2. 登录态正常(调 check_wechatide_status,loginExpired=false)
  3. 项目已导入(project_list 确认路径与 compileType:game / miniprogram)
  4. 项目窗口已打开(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_actionselector 定位元素、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 的操作序列:

  1. automation_evaluate 读存档:wx.getStorageSync('sgpt.pref') → 拿到”最后选中 id”
  2. automation_game_action tap 指定卡片(坐标从布局常量精确计算)
  3. 再 evaluate 复读存档 → 实锤:选中的确实是下方那张(坐标命中偏移)
  4. 回源码定位:渲染的坐标系做了视口偏移,触摸命中没做——一行修复
  5. touch 一下源文件触发自动重编译 → 重跑同一交互 → evaluate 复读 → 修复确认

全程我只描述了现象。其中最关键的转折是:截图看起来”没变化”,其实是工具的内容去重机制在骗人;用 evaluate 读运行时数据才是不说谎的判定。

场景 2:发布体验版 + 推真机预览

AI 调 upload(版本号 + 描述)→ 包体积报告直接返回(747KB / 4MB 上限)
AI 调 auto_preview → 预览版直接出现在我微信里
我:掏出手机验收

传统流程里的”导出二维码 → 扫码 → 等待”被压缩成一条指令。

场景 3:云存储自动化(60 张图一次点亮)

小游戏做了”云端图库”:60 张图放云存储,客户端拉清单按需下载。接入 MCP 后:

  1. AI 组装本地待传目录(只含 webp 原图 + 缩略图,120 个文件 2.4MB;glob 排除样张目录,防同名 id 覆盖)
  2. 调 cloud_manage_storage 目录上传 → 工具里弹确认框 → 我点一下确认
  3. AI 用 polling_task_result 收到上传结果,从返回的临时 URL 里提取 bucket 标识,拼出 cloud://<env>.<bucket>/<path> 形式的 fileID
  4. 生成图库清单 JSON → 上传 → 写进客户端配置(客户端合并按 id 去重,同 id 以包内图为准)
  5. 刷新模拟器 → 图库从 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 自查自修”的人;提审期需要批量验证(多机型截图、回归检查)的人。

局限(截至实测时点):

  1. 小游戏画布的触摸派发在窗口重载后偶尔断绑,需要重开项目窗口恢复(小程序的 selector 通道更成熟)
  2. 控制台是缓冲区快照,不是实时流
  3. 云函数 / 数据库工具偏管理向,复杂业务调试仍以常规手段为主
  4. 能力在快速迭代中,以官方文档为准

结语

这套组合最大的价值不是省了几次点击,而是把”调试”从人的串行劳动变成了 AI 的并行闭环:你把现象描述给 AI,它读数据、跑交互、定位代码、修复、回归、存档证据,最后把结论和证据一起交给你。

开发者工具把 MCP 接口官方内置进来,意味着这条路径是被官方支持的长期方向——值得现在就把它纳入你的工作流。


本文基于休闲小游戏《拼图暖时光》(Canvas 2D + TypeScript)的完整开发周期实测整理。