Skip to content

feat(msg-push): ✨ 消息推送配置 MCP 工具 queryMessagePush/manageMessagePush (dc0eaaf9) - #948

Open
binggg wants to merge 4 commits into
mainfrom
feat/msg-push-mcp
Open

feat(msg-push): ✨ 消息推送配置 MCP 工具 queryMessagePush/manageMessagePush (dc0eaaf9)#948
binggg wants to merge 4 commits into
mainfrom
feat/msg-push-mcp

Conversation

@binggg

@binggg binggg commented Aug 20, 2026

Copy link
Copy Markdown
Member

概述

按 spec(specs/virtual-payment-mcp/,分支 feat/virtual-payment-spec)实现消息推送配置 MCP 工具。只开发不发版(发版由 Booker 确认后另行处理),未执行 npm publish。

ato-task:dc0eaaf9-61b5-450a-8896-28650d707cf0

变更内容

  • 新增 mcp/src/tools/msg-push.tsqueryMessagePush(action=list / listSupportedEvents)+ manageMessagePush(action=subscribe / unsubscribe / setEnable / ensureCloudFunctionMode)
    • qbase CGI 封装:getappconfig / route/getcallbacksupportlist / uploadappconfig(全量 overwrite + version 乐观锁)/ get|setcontainercallbackconfig(云托管模式)
    • 幂等 merge:先读全量 → merge(同 (msgType,event,env,functionName) 去重、一事一函数重绑)→ 集合无变化不 POST(NO_CHANGE)→ version 冲突返回可重试 VERSION_CONFLICT(RFC 7232 ETag/412 语义,对齐 kubectl apply 声明式幂等)
    • event_types 开放字符串数组(任意合法事件,xpay 7 事件为缺省默认集合);显式传入时用 getcallbacksupportlist 严格校验(非法事件 → INVALID_EVENT_TYPE),缺省集合仅警告
    • 写操作走 confirm="yes" 确认机制(CONFIRM_REQUIRED)
    • 传输层经 pluginOptions.msgPush.requestFn 注入(微信 IDE 登录态);未注入时返回 MSG_PUSH_TRANSPORT_UNAVAILABLE 指引错误(安全边界:不直连 qbase)
  • mcp/src/server.ts:msg-push 注册进 AVAILABLE_PLUGINS不进 DEFAULT_PLUGINS(默认不启用,需用户/微信侧经 pluginsEnabled 显式启用)
  • mcp/src/types.ts:新增 MsgPushOverrides / MsgPushRequestFn / MsgPushRequestFnOptions / MsgPushQbaseResponsePluginOptions 增加 msgPush 字段
  • 测试mcp/src/tools/msg-push.test.ts(24 用例:schema 枚举/幂等/version 冲突/非法事件/ensureCloudFunctionMode/merge 纯函数)+ mcp/src/server.test.ts(默认不注册 + 显式启用注册)
  • mcp/scripts/test-with-ticket.cjs:新增 --group msgpush 测试组(真实 ticket 调用 getappconfig/uploadappconfig 验证幂等,或 --mock-msgpush 内存模拟后端,不动真实配置)
  • 生成产物:重新生成 scripts/tools.json(40 工具)与 doc/mcp-tools.mdscripts/generate-tools-json.mjs 增加 DOC_PLUGINS 全量插件列表(否则 msg-push 不出现)
  • 文档doc/connection-modes.mdx 插件表新增 msg-push 行(默认启用=否)

验证

  • msg-push.test.ts 24/24 通过;server.test.ts 8/8 通过;全量 vitest 1036 passed / 60 skipped(0 失败)
  • test-with-ticket.cjs --group msgpush --mock-msgpush 全过(list / listSupportedEvents / subscribe 幂等 NO_CHANGE / confirm 保护 / unsubscribe 还原)
  • npm run build 成功

明确不做(任务边界)

  • 云调用工具(queryCloudCall / manageCloudCall)——已从设计移除,归属微信云开发后端开发
  • 虚拟支付商户查询(queryVirtualPaymentConfig)——已从设计移除,归属控制台团队
  • npm publish / 发版 —— 由 Booker 确认后另行处理

t added 3 commits August 20, 2026 23:03
- qoder 插件 zip(cloudbase-qoder.zip)与 qoder skill zip(cloudbase-skill.zip)
  纳入 release-plugin-zips.yml 白名单,随 release 自动打包上传
- pack-qoder-plugin.mjs / pack-qoder-skill.mjs 默认输出名改为版本无关
  (与 kimi 一致:release tag 承载版本,zip-url 跨 release 稳定)
- 新增 scripts/releases/release-assets-inventory.md 盘点文档:
  12 类分发物清单 + 缺口判定(claude/cursor/codex/.plugin 走独立仓库
  分发不挂 assets,ClawHub/SkillHub/npm 走独立 registry)
…geMessagePush (dc0eaaf9)

Implement opt-in msg-push plugin for mini-program message push config:
- mcp/src/tools/msg-push.ts: queryMessagePush (list/listSupportedEvents) and
  manageMessagePush (subscribe/unsubscribe/setEnable/ensureCloudFunctionMode)
  over qbase CGIs (getappconfig/uploadappconfig/getcallbacksupportlist/
  get|setcontainercallbackconfig), declarative idempotent merge (read → merge →
  full overwrite with version optimistic lock, no-op skips POST), RFC 7232
  ETag/412-style VERSION_CONFLICT retryable error, CONFIRM_REQUIRED write gate
- Transport injected via pluginOptions.msgPush.requestFn (WeChat IDE login
  session); without it tools return MSG_PUSH_TRANSPORT_UNAVAILABLE guidance
- Register msg-push in AVAILABLE_PLUGINS only (NOT in DEFAULT_PLUGINS);
  XPAY_EVENT_TYPES 7 events as default subscribe set, event_types is open
  string array validated against getcallbacksupportlist when explicitly passed
- Schema tests (enums/idempotent merge/version conflict/invalid event),
  regenerate scripts/tools.json + doc/mcp-tools.md, extend
  mcp/scripts/test-with-ticket.cjs with --group msgpush (real ticket or
  --mock-msgpush), update doc/connection-modes.mdx plugin table
Comment thread mcp/scripts/test-with-ticket.cjs Fixed
…et (dc0eaaf9)

github-code-quality flagged unused variable; CGI base documented in comment.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant