本项目是一个本地 Streamable HTTP MCP Server,用于把 WMPFDebugger 暴露的裸 Chrome DevTools Protocol WebSocket 包装成 MCP 工具,辅助 Codex / Cursor / VS Code Agent 对已授权调试的微信小程序进行安全评估、证据采集和报告整理。
- 仅用于已获得授权的小程序、本机调试环境和当前 WMPFDebugger 会话。
- MCP HTTP 服务只监听
127.0.0.1。 - 默认只连接
ws://127.0.0.1:62000,CDP URL 只允许127.0.0.1或localhost。 /mcp必须携带启动时输出的 token。- 主动请求修改/重放能力未实现;当前工具只做被动采集、单次页面交互观察和人工验证计划生成。
- 点击类工具会拦截支付、提交订单、删除、注销、退款、提现、确认支付等危险文本,默认不执行,必须显式
requireConfirm=true。
npm install
npm run dev也可以指定固定 token:
$env:MCP_TOKEN="your-local-token"
npm run dev启动后访问根路径查看当前 MCP URL:
http://127.0.0.1:43827/
默认 MCP URL:
http://127.0.0.1:43827/mcp?token=wmpf-local-token
[mcp_servers.wmpf]
enabled = true
url = "http://127.0.0.1:43827/mcp?token=wmpf-local-token"
startup_timeout_sec = 20
tool_timeout_sec = 60使用 wmpf MCP,先调用 status,然后 connect_wmpf 连接 ws://127.0.0.1:62000。
随后调用 hook_wx_request 和 hook_fetch_and_xhr,打开当前小程序页面并操作关键业务流程。
再调用 dump_runtime_snapshot、get_all_requests、get_api_inventory、analyze_auth_surface、find_idor_candidates、find_sensitive_data_exposure、find_upload_surfaces、find_payment_and_order_surfaces、find_sign_related_requests。
请基于证据生成 generate_security_notes,只输出发现线索和人工验证建议,不直接下漏洞结论。
status:查看 MCP 和 CDP 连接状态。connect_wmpf:连接本机 WMPFDebugger CDP WebSocket,并启用 Runtime/Network。select_appservice_context:自动枚举 Target、flatten attach,并选择包含wx.request/require/getCurrentPages的 appservice Runtime context。cdp_call:调用任意 CDP 方法,支持传入 flattensessionId。cdp_call_target:对指定targetId自动Target.attachToTarget({ flatten: true })后在子 session 中调用 CDP。runtime_eval:在当前 Runtime 执行 JS。runtime_eval_appservice:在自动选择的 appservice Runtime context 中执行 JS。network_enable:启用 CDP Network。get_recent_requests:读取最近 CDP Network 请求,支持domain、pathPrefix、keyword、excludeStatic、compact过滤。get_response_body:尝试读取 CDP 响应体。get_recent_console:读取 console 和 exception 事件。
dump_runtime_snapshot:采集页面运行时快照、storage 摘要、可见文本、可交互元素、疑似框架对象。get_basic_page_info:兼容旧版页面信息工具。get_document_html:读取 document HTML 前缀。query_selector_text:读取指定元素文本和 HTML。list_interactive_elements:列出按钮、输入框、链接及高风险关键词元素。safe_click_and_observe:单次点击并观察 URL、文本、storage、请求和 console 变化。input_text_and_observe:输入文本并观察变化。inspect_window_keys:检索 window keys。search_global_string:搜索页面、脚本、window keys 中的单个关键词。
hook_wx_request:自动选择 appservice context 后注入非破坏性wx.requesthook。hook_fetch_and_xhr:注入非破坏性 fetch/XHR hook,记录响应和调用栈。get_hooked_requests:读取 fetch/XHR hook 记录。get_all_requests:汇总 CDP、wx.request、fetch/XHR 请求,并统一格式。get_request_detail:查询单个请求详情,CDP 请求会尝试读取响应体。get_api_inventory:按 method + path 生成接口资产清单。
analyze_auth_surface:分析认证字段、token 位置、query token、缺失认证和重放线索。find_idor_candidates:查找越权候选接口,只给人工验证建议。find_sensitive_data_exposure:查找敏感字段并默认脱敏。find_upload_surfaces:识别上传、文件、图片、头像、媒体接口。find_payment_and_order_surfaces:识别支付、订单、优惠券、钱包、积分接口。find_debug_admin_surfaces:识别 debug/test/admin/internal/dev/staging/mock 线索。find_sign_related_requests:识别 sign/signature/timestamp/nonce 请求。
build_replay_plan:根据请求生成 Burp Repeater 人工重放计划,不发送请求。compare_two_requests:对比两个请求的 URL、header、body、auth 和 response 差异。passive_param_fuzz_suggestions:生成参数 fuzz 建议,不发送请求,并标注需要授权环境人工验证。
inspect_wx_config:读取__wxConfig、__wxAppCode__、__wxRoute、__wxAppData__摘要和关键词命中。search_runtime_keywords:搜索 window keys、document HTML、script 文本、storage 和已抓请求。trace_request_callstack:从 hook 记录中提取发起请求的 JS 调用栈。
inspect_vuex_store:在 appservice context 中查找 Vuex-like store,保存原始 state 快照,并返回 state/mutations/actions 摘要。patch_vuex_state:按 path 修改 state 或调用 mutation。默认dryRun=true,只有dryRun=false且requireConfirm=true才会修改本地 Runtime 状态。restore_vuex_state:从inspect_vuex_store保存的快照恢复 state。默认dryRun=true,只有dryRun=false且requireConfirm=true才会恢复。
export_session:导出当前会话 JSON 到reports/session-*.json。generate_security_notes:生成 Markdown 安全评估笔记,只写发现线索和验证建议。generate_api_table_markdown:生成接口清单 Markdown 表格。
- 启动 WMPFDebugger 并确认 DevTools 可连接
ws=127.0.0.1:62000。 - 启动本项目并把启动输出的 MCP URL 配入 Codex。
- 调用
connect_wmpf。 - 调用
select_appservice_context,确认选中的 context 包含wx.request/require。 - 调用
hook_wx_request和hook_fetch_and_xhr。 - 在小程序中人工操作登录、搜索、下单前流程、个人中心、地址、优惠券、上传等页面。
- 使用
get_recent_requests的excludeStatic=true、domain、pathPrefix过滤图片、字体、data URI 等噪声。 - 调用
get_api_inventory和各类find_*工具生成线索。 - 对候选接口使用
build_replay_plan、compare_two_requests、passive_param_fuzz_suggestions制定人工验证步骤。 - 如需验证前端状态授权绕过,先调用
inspect_vuex_store保存快照,再用patch_vuex_statedry-run 预览;确认后才设置dryRun=false和requireConfirm=true。结束后用restore_vuex_state复原。 - 调用
export_session和generate_security_notes保存证据与笔记。
npm run build
npm startMIT