
Weapp Agent Mcp
io.github.Chaixueyuan由 GitHub 账号 Chaixueyuan 发布v0.4.8更新于 Oct 24, 2026
Agent-first MCP server for WeChat Mini Program debugging & automation via WeChat DevTools.
概览
让助手驱动微信开发者工具调试和自动化微信小程序:导航、点击、输入、截图、页面检查,并运行轻量回归场景。
- 可以做什么
- 把 miniprogram-automator SDK 封装为 MCP 工具,让 agent 无需编写脚本即可控制微信开发者工具。应用类工具负责连接管理(mp_ensureConnection、mp_diagnoseConnection、mp_healthCheck、mp_recoverConnection)、导航、截图、控制台日志、调用 wx API、执行代码,以及运行场景并生成 markdown 报告。页面与元素类工具可读写页面或组件数据、调用方法、等待元素或路由、断言取值,并执行点击、触摸、滑动、输入和滚动操作。
- 适用场景
- 适合由 agent 主导小程序调试、页面巡检或基于稳定选择器的 UI 验证,也适合产出用于 PR 或值班的短场景回归报告。它不适合作为并发截图通道,也不适合超长高压的全链路回归引擎。
- 运行要求
- 通过 npx 或全局 npm 安装以 stdio 在本地运行,需要 Node.js 18+ 和 npm。需要已安装并支持命令行的微信开发者工具、可在其中打开的小程序项目,以及在开发者工具设置中开启自动化测试与服务端口。配置使用 WEAPP_WS_ENDPOINT、WEAPP_PROJECT_PATH、WECHAT_DEVTOOLS_CLI_PATH、WEAPP_DEVTOOLS_PORT 等环境变量;可选密钥为 WEAPP_AUTO_ACCOUNT 和 WEAPP_DEVTOOLS_TICKET。
安装
在 SourceWeft 中
- 打开 控制台中的 Weapp Agent Mcp,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
weapp-agent-mcp
[npm version] [npm downloads] [license] [MCP]
Agent-first MCP server for WeChat Mini Program debugging, automation, and lightweight regression testing.
面向 agent 的微信小程序 MCP 服务 — 让 Claude Code / Cursor / Codex 等 agent 在对话中直接驱动微信开发者工具完成调试、UI 操作、页面巡检与轻量测试。
📖 Changelog · 🐛 Issues · 💬 Discussions
weapp-agent-mcp 是一个面向 agent 的微信小程序 MCP 服务,基于 miniprogram-automator 封装微信开发者工具自动化能力,用于页面调试、元素操作、轻量回归测试与恢复友好型排查。
它适合:
- agent 主开发 / 主调试
- 串行截图与页面巡检
- 轻量 scenario / report
- 基于稳定 selector 的自动化验证
它当前不应被宣传为:
- 并发截图通道
- 超长高压全链路回归引擎
文档导航
更完整的文档入口见 docs/README.md。
为什么选 weapp-agent-mcp
如果你已经在用 Claude Code / Cursor / Codex 等 agent 写小程序,传统的 miniprogram-automator 脚本式调用不够顺手 — 你得让 agent 写 node 脚本、跑、读输出、再调整。本项目把自动化能力直接暴露成 agent 工具调用,让 agent 在对话中可以:
- 🤖 零脚本调试 — 直接调用
mp_screenshot/page_snapshot/element_tap,不必中转脚本 - 🔁 恢复友好 — 内置
mp_healthCheck/mp_recoverConnection,断连后能自愈,长会话更稳 - 📋 轻量回归 —
mp_runScenario+mp_generateScenarioReport产出 markdown 报告,适合给 PR / oncall 用 - 🎯 稳定 selector 优先 — 设计上鼓励
qa-*命名锚点,减少 UI 改版后的脚本碎裂
适用 / 不适用对比
前置要求
- 已安装微信开发者工具,支持命令行访问(
cli/cli.bat) - 本地已安装 Node.js 18+ 和
npm - 有可以在开发者工具中打开的小程序项目
- 已在微信开发者工具中开启自动化测试与服务端口
快速开始
方式一:通过 npm / npx 接入(推荐,普通用户默认这样用)
不需要先把仓库拉到本地,也不需要自己手动构建 dist。只要本机有 Node.js 和 npx,就可以直接在 MCP 客户端里这样配置:
如果你希望在 Claude 等客户端里用更短的别名,也可以把 MCP server key 命名为
weapp-dev,但发布包名和服务名以weapp-agent-mcp为准。
可选:如果你习惯全局安装,也可以先执行:
然后把 MCP 配置改成:
方式二:本地源码构建接入(仅开发者 / 贡献者)
只有在以下场景才需要这样用:
- 你正在开发这个仓库本身
- 你要调试尚未发布到 npm 的改动
- 你要在本地修改源码后立刻验证
本地开发
重要边界
mp_screenshot当前按串行单通道能力设计,不支持并发压测- 复杂业务链建议拆成多个短 scenario,而不是一个超长 scenario
page_snapshot、mp_screenshot、长mp_runScenario在连续复杂操作后可能超时- 若出现连续失败,先运行
mp_healthCheck;仅当needsRecovery=true时执行mp_recoverConnection - 稳定性高度依赖业务页面提供清晰的
qa-*selector 或其他稳定定位锚点
MCP 客户端集成
Claude Code 自动批准工具权限
由于使用 Claude Code 调用 MCP 工具时,会触发工具调用权限申请,此时可能会丢失 MCP 与微信开发者工具的连接状态,由于获取控制台输出高度依赖连接状态,此时会无法连贯的获取输出日志,所以建议手动添加权限:
在项目目录下创建 .claude/settings.local.json 文件,或在已有文件添加以下内容后即可免确认直接调用工具,或者根据需要添加您允许免确认调用的工具:
注意: 工具名称格式为
mcp__<服务器名称>__<工具名称>,请确保服务器名称与您的 MCP 配置中的名称一致。
可选:人工预启动微信开发者工具
默认流程无需 agent 手动执行 CLI:直接调用 mp_ensureConnection,本地端口未监听且允许 AutoLaunch 时,server 会自行执行 cli auto。下面的命令只用于人工排障,或显式设置 WEAPP_AUTOLAUNCH=false 后由用户自行预启动开发者工具。
💡 在开始之前:
- 打开微信开发者工具
- 进入 设置 → 安全设置 → 服务端口
- 开启 "HTTP 调试" 和 "自动化测试"
人工使用命令行启动
使用命令行启动微信开发者工具并自动开启 WebSocket 服务:
macOS:
Windows:
其中:
--project指定小程序项目目录路径(请替换为实际的项目路径)--auto-port指定 automation websocket 端口(默认 9420)。注意:这个 flag 在cli auto --help输出里看不到,但官方miniprogram-automatorSDK 内部一直用,是有效参数
⚠️ 警告 由于沙箱机制,部分客户端不允许 MCP 访问项目目录以外的微信开发者工具的 cli,所以这里只介绍了使用 WebSocket 服务
环境变量配置
通过环境变量控制自动化工具如何连接到微信开发者工具:
注意:
launch/ 本地自动拉起最终都需要可解析的小程序项目目录。可通过connection.projectPath、WEAPP_PROJECT_PATH、mp_setDefaultProject的持久化默认值、最近项目或当前工作目录提供;显式设置的默认项目不会被后续活动会话覆盖。
工具调用可以通过 connection 对象覆盖这些默认值中的大部分。
连接模式说明
模式 A:连接已有 IDE(connect)
适用于你已经手动打开微信开发者工具,并且已经在 设置 → 安全设置 → 服务端口 中开启了自动化。
这个模式下:
WEAPP_WS_ENDPOINT必须指向可被miniprogram-automator.connect()连接的 websocket endpoint- 不要把 IDE HTTP 端口误当成 websocket 端口
- 不要手动执行
cli open、cli auto、cli quit - 默认直接调用
mp_ensureConnection;它会优先复用现有会话,并在本地端口未监听时按配置自愈 - 只想只读探测,或 ensure / recovery 已失败时,再调用
mp_diagnoseConnection - 不要自动切端口;如需禁止 ensure 自动执行
cli auto,设置WEAPP_AUTOLAUNCH=false
模式 B:由 MCP 拉起 IDE(launch)
适用于当前未打开 IDE,需要 MCP 通过 CLI 启动项目。
这个模式下:
WEAPP_DEVTOOLS_PORT表示cli auto --auto-port使用的自动化端口- 只有在明确使用
launch模式时,MCP 才应该启动 IDE - 如果检测到同项目已经有 IDE 实例在运行,应停止自动 launch 并返回诊断信息
connect与launch两种模式不要混用
--port 和 --auto-port 的区别
微信开发者工具至少涉及两类端口:
--port:IDE HTTP 服务端口--auto-port:自动化 websocket 端口
这两个端口不能混用。WEAPP_WS_ENDPOINT 必须指向自动化 websocket 端口,而不是 IDE HTTP 端口。
Codex / agent 使用规则
当用户已经打开微信开发者工具时:
- 不要执行
cli open - 不要执行
cli quit - 默认直接调用
mp_ensureConnection,它会优先复用现有自动化会话 mp_diagnoseConnection仅用于只读探测,或在 ensure / recovery 失败后补充诊断- 不要手动切端口;本地自动化端口未监听且
WEAPP_AUTOLAUNCH未禁用时,mp_ensureConnection可自行执行cli auto - 不允许自动拉起时设置
WEAPP_AUTOLAUNCH=false
可用工具
应用工具(Application Tools)
mp_diagnoseConnection– 只诊断当前连接目标,不启动 IDE、不修改项目状态mp_ensureConnection– 确保自动化会话就绪,是连接链路默认入口;失败后再按返回指引诊断或恢复mp_navigate– 在小程序内导航,支持navigateTo、redirectTo、reLaunch、switchTab或navigateBackmp_screenshot– 捕获屏幕截图并返回(或保存到磁盘)mp_callWx– 调用微信小程序 API 方法(如wx.showToast)mp_evaluate– 向小程序 AppService 注入并执行函数代码,适合做显式运行时读取mp_pollUntil– 轮询 AppService 条件,命中后可执行动作并采集前后状态快照mp_getLogs– 获取小程序控制台日志,支持按type、contains、since、limit过滤,并返回日志监听状态(如listenerAttached、lastLogAt、sessionId)mp_runScenario– 按顺序执行一组最小测试步骤,当前支持navigate、tap、input、waitRoute、expect*、snapshot、getLogs、screenshotmp_generateScenarioReport– 执行 scenario 并输出 markdown 报告;可选写入outputPath,适合产出轻量回归测试记录,并可引用截图路径mp_currentPage– 获取当前页面信息(路径、查询参数、尺寸和滚动位置),withData为 true 时额外返回页面数据mp_healthCheck– 聚合连接、页面、项目路径和日志监听状态,判断当前是否健康、是否需要恢复mp_recoverConnection– 按标准顺序执行恢复,并返回恢复动作、恢复前后状态与最新 healthmp_listProjects– 列出微信开发者工具中的最近项目,方便选择项目目录mp_setDefaultProject– 设置默认的小程序项目路径,设置后下次连接会自动使用该项目
页面工具(Page Tools)
page_getElement– 通过选择器获取页面元素,返回元素摘要信息(tagName、text、value、size、offset);设置withWxml: true可额外返回完整 outerWxml;支持 [index=N] 语法选择第 N 个元素page_getElements– 通过选择器获取页面元素数组,返回每个元素的摘要信息;limit默认/最大 100;设置withWxml: true可额外返回每个元素的完整 outerWxml;支持 [index=N] 语法page_waitElement– 等待元素出现在页面上(⚠️ 不适用于自定义组件内部元素);支持 [index=N] 语法;增加超时和重试间隔参数page_waitElementGone– 等待元素从页面上消失;支持 [index=N] 语法;支持超时和重试间隔参数page_waitRoute– 等待当前页面路径变为指定值,适合确认导航真正完成;支持超时和重试间隔参数page_waitTimeout– 等待指定的毫秒数page_expectRoute– 断言当前页面路径是否等于预期值page_expectVisible– 断言页面上是否存在可定位到的元素;支持[index=N]语法page_expectElementText– 断言元素文本是否等于或包含预期值;支持[index=N]语法page_expectCount– 断言页面上匹配选择器的元素数量是否等于预期值page_expectData– 断言当前页面指定data路径的值是否与预期相等page_snapshot– 返回当前页面的轻量结构快照,聚合 route、query、指定 data 路径和值,以及关键选择器的元素摘要;不默认处理页面 title,标题校验请用明确选择器配合page_expectElementTextpage_getData– 获取当前页面的数据对象,可选择指定子数据路径page_setData– 使用setData更新当前页面的数据page_callMethod– 调用当前页面实例上暴露的方法
元素工具(Element Tools)
element_tap– 通过 CSS 选择器模拟点击 WXML 元素;支持 [index=N] 语法选择第 N 个元素element_touch– 对元素执行真实触摸事件;支持start/move/end/sequence四种模式,坐标基于元素左上角,默认取元素中心;支持 [index=N] 语法element_swipe– 对元素执行真实滑动手势;支持up/down/left/right,可指定距离和持续时间;支持 [index=N] 语法element_input– 向元素输入文本(适用于input和textarea组件)element_callMethod– 调用自定义组件实例的方法element_getData– 获取自定义组件实例的渲染数据element_setData– 设置自定义组件实例的渲染数据element_getInnerElement– 获取元素内的元素(相当于element.$(selector)),返回元素摘要信息;设置withWxml: true可额外返回完整 outerWxmlelement_getInnerElements– 获取元素内的元素数组(相当于element.$$(selector)),返回元素摘要信息;limit默认/最大 100;设置withWxml: true可额外返回每个元素的完整 outerWxmlelement_getWxml– 获取元素 WXML(内部或外部)element_getStyles– 获取元素的 CSS 样式值,names 参数为样式名数组(如['color', 'fontSize'])element_scrollTo– 滚动 scroll-view 组件到指定位置(x, y)element_getAttributes– 获取元素的特性值,names 参数为特性名数组(如['class', 'id', 'data-index'])element_getBoundingClientRect– 获取元素相对于视口的边界矩形信息(left、top、width、height、right、bottom),考虑 CSS transform 变换(目前仅支持 ID 选择器、类选择器)
每个工具都接受可选的 connection 块来覆盖环境默认值(项目路径、CLI 路径、WebSocket 端点等)。
使用技巧
一般提示
- 连接前,在微信开发者工具中启用自动化(
设置 → 安全设置 → 服务端口) - 默认先调用
mp_ensureConnection建立或复用会话;只读探测或连接失败排查再用mp_diagnoseConnection - 使用
WEAPP_AUTOCLOSE=true适合无状态的一次性交互 - 导航时始终使用绝对路径(以
/开头):/pages/mine/mine - tabBar 页面使用
switchTab,普通页面使用navigateTo switchTab只应视为一种导航动作,不应默认作为底部 tab UI 选中态的判断依据;很多项目会自定义底部 tab
操作自定义组件
操作自定义组件时,有两种方法:
方法一:使用 innerSelector 参数(推荐)
适用于 element_tap、element_input、element_getWxml 等工具:
selector:自定义组件的选择器innerSelector:组件内部元素的选择器
方法二:使用元素内查询工具
适用于 element_getInnerElement 和 element_getInnerElements:
限制说明
page_waitElement不适用于自定义组件内部元素。请使用page_waitTimeout配合元素查询工具进行轮询检查。- 页面跳转校验可优先使用
page_waitRoute,比单纯mp_navigate后固定等待更稳。 - 临时弹层、loading、toast 等消失场景可使用
page_waitElementGone。
自动启动功能(AutoLaunch)
本地 connect 目标端口未监听时,mp_ensureConnection 默认会使用 cli auto 拉起开发者工具。设置 WEAPP_AUTOLAUNCH=false 可显式禁用。远程 wsEndpoint 不会触发本机自动拉起。
当前安全策略是:
- 如果用户已经手动打开 IDE,应优先使用
connect - 本地
connect端口未监听时,MCP 可自动执行cli auto,但不自动切模式、不自动切端口 autoLaunch=false或远程wsEndpoint时不会自动启动 IDE- 如果检测到 DevTools 已在运行,会优先阻止重复拉起
配置示例
工作流程
- 首次连接时,检测到本地自动化端口未监听且未设置
WEAPP_AUTOLAUNCH=false - 检查 9420 端口是否有服务
- 无服务则自动启动开发者工具(使用
cli.bat auto --project <path> --auto-port 9420) - 按
WEAPP_LAUNCH_TIMEOUT等待开发者工具就绪(默认 45 秒) - 建立 WebSocket 连接
- 后续连接自动复用现有连接
提示:使用
mp_setDefaultProject设置默认项目后,下次连接无需再次选择项目。
来源:README.md,提交 117e660
工具
0版本历史
1- v0.4.8最新Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分