Skip to content

About

麦麦省的券谁都能领,但领了不等于楼下那家店认。一键领全后逐家门店校验哪张券真的能核销,并算出券后实付,直接回答「去哪家店、用哪张券、省多少钱」。基于麦当劳 MCP。

Topics

Resources

Stars

117 stars

Watchers

0 watching

Forks

Repository files navigation

麦门券力透视 · mcd-coupon-xray

麦麦省的券谁都能领,但领了不等于你楼下那家店认。

这个 Skill 一键领全,然后逐家门店校验:哪家店真的能核销、券后实付多少、同一张券在哪家店才用得掉。

它解决的问题

麦当劳 MCP 里有两个都叫「我的券」的接口,语义完全不同:

接口 你看到的 它校验了什么
query-my-coupons 你拥有的券 什么都没校验
query-store-coupons 某家店 + 某渠道下能核销的券 门店、渠道、下单规则

官方文档自己写得很清楚:

该接口返回的是用户拥有的券,不进行门店、渠道、配送方式等下单规则校验,因此不承诺可用于当前订单。若业务目标是"当前门店/当前订单可用的券",请调用 query-store-coupons。

于是产生了一个几乎所有人都撞过的体验:卡包里躺着七八张券,兴冲冲走到楼下门店,点开一单,发现一张都用不上。

「能领」和「能用」之间的差额,就是这个 Skill 要查的东西。

实测到的五个反直觉事实

这五个都是用真实 Token、自己的账号把整条链跑完后得出的(2026-10-23,北京三里屯 5 家门店):

1. 一张券要过三道门:领了 → 进包 → 今天能用

实测漏斗:auto-bind-coupons 领取 5 张全部成功 → query-my-coupons 卡包里只有 4 张(免费脆薯饼领取成功却没进包)→ 卡包 4 张里又有 2 张有效期从 10-26 才开始,query-store-coupons 返回的当天真正能核销的只有 2 张。

所以「我的券」这个数字,和「今天在楼下这家店能用掉几张」之间隔了两层,每一层都会安静地吃掉一部分。

2. 「一张券」的唯一标识是 couponId,不是券名

领取返回的 5 条记录,去重后是 5 张券、5 个不同 couponId——「11.9 元麦辣鸡腿堡」出现两次,是两个不同活动:一批有效期到 10-23、一批从 10-26 开始,各有真实券码。

按券名去重会把两张真券合并成一张。这不是展示优化,是把钱算丢。(本项目早期版本犯过这个错,已修正。)

3. 菜单编码 ≠ 计价编码

券的适用商品 9900016534(王牌炸鸡任选 2)不在 query-meals 返回的菜单里,但 calculate-price 照样算出 23.8 → 19.9 元。

不能用「菜单里有没有这个商品」来判断券可不可用,应直接调 calculate-price。

4. 卡包是空的,按门店查也一定是空的

query-store-coupons 不是「返回该店全部可用券」,而是「在你已持有的券里筛出该店能用的」。实测:空卡包 + 有效门店 1951066 → 返回 []。

所以顺序必须是先领券,再查门店。反过来做,任何门店都是空的,会得出「这家店一张券都不支持」的错误结论。

5. 门店经纬度是废的

query-nearby-stores 每家店都返回 longitude: 0.0、latitude: 0.0,唯一有效的是 distance(米)。任何想拿坐标画地图或自己算距离的写法都会失败。

怎么用

在 WorkBuddy(或任何支持 MCP 的客户端)里配好麦当劳 MCP,然后直接说:

帮我看看我的券哪家店能用
我想在国贸附近吃,用券之后哪家最便宜

Skill 会走完整条链:

available-coupons      麦麦省可领券(按券名去重,报出真实张数)
      ↓
auto-bind-coupons      一键领取(写入卡包,纯新增)
      ↓
query-my-coupons       复核卡包,确认券真的进来了
      ↓
query-nearby-stores    拿到 storeCode(收藏为空自动降级为城市+地标搜索)
      ↓
query-store-coupons    逐店校验:这张券这家店认不认
      ↓
query-meals           有可用券的店,取菜单
      ↓
calculate-price       券前 / 券后 / 省多少

输出两张表。以下为 2026-10-23 在北京三里屯 5 家门店的真实运行结果:

门店 距离 可用券 最优券 券前 券后 省
麦当劳北京长虹桥餐厅 628m 2 11.9 元麦辣鸡腿堡 22.5 11.9 10.6
麦当劳北京团结湖餐厅 933m 2 11.9 元麦辣鸡腿堡 22.5 11.9 10.6
…(本批 5 家店结果一致,券为通用券)

外加一张跨店可用性矩阵,直接回答「同一张券哪家店认」。本批样本里 5 家店可用性完全一致——矩阵的价值在有门店限制的券上才会显现,但逻辑必须先在。

最后给一句能直接执行的话:去长虹桥店用 11.9 元麦辣鸡腿堡券,券后 11.9 元,省 10.6 元。

目标用户

  • 卡包里攒了一堆券、但从没搞清楚过能不能用的人
  • 在几个门店之间犹豫、想选最省钱那家的人
  • 公司楼下 / 家楼下有多家麦当劳、想知道哪家券覆盖更好的通勤族
  • 用企业团餐 / 得来速、渠道规则更绕的场景

安装

1. 申请 MCP Token

打开 open.mcd.cn/mcp,手机号登录 → 右上「控制台」→「激活」→ 同意协议 → 复制 Token。

2. 配置 MCP 连接

本仓库的 mcp-config.example.json 是脱敏模板,把 YOUR_MCP_TOKEN 换成你的真实 Token:

{
  "mcpServers": {
    "mcd-mcp": {
      "type": "streamablehttp",
      "url": "https://mcp.mcd.cn",
      "headers": {
        "Authorization": "Bearer YOUR_MCP_TOKEN"
      }
    }
  }
}

WorkBuddy 用户:左侧「专家·技能·连接器」→「连接器」→ 右上「自定义连接器」→「配置 MCP」→ 粘贴上面的 JSON → 保存 → 启用。

3. 放入 Skill 目录

把 SKILL.md 放到 ~/.workbuddy/skills/mcd-coupon-xray/ 下,重启会话即可。

4. 自检脚本

python scripts/xray.py --selftest
python -m pytest tests/ -v      # 或 python tests/test_xray.py

在线演示

👉 https://wahaha-potato.github.io/mcd-coupon-xray/

页面里所有数字来自 2026-10-23 用真实账号跑完的整条链路,无一处虚构。

仓库结构

mcd-coupon-xray/
├── SKILL.md                    Skill 主体:流程、渠道参数矩阵、输出纪律
├── README.md                   本文件
├── CONTEST_DECLARATION.md      参赛声明(官方原文,未改动)
├── MCP_INTEGRATION.md          逐工具的调用链、参数、实测返回与业务价值
├── mcp-config.example.json     脱敏配置模板(仅环境变量占位符)
├── workbuddy.md                WorkBuddy 开发过程对话上下文
├── docs/
│   └── index.html              在线演示页(GitHub Pages,真实数据)
├── LICENSE                     MIT
├── .gitignore                  挡住本地配置与凭据
├── scripts/
│   └── xray.py                 去重 / 归并 / 矩阵 / 排序(纯函数,无网络)
└── tests/
    └── test_xray.py            18 个单元测试,覆盖上述五个纯函数

边界

  • 本项目的结论只对调用当时的券状态、门店库存、活动规则有效。券会过期、门店会调整。
  • 不构成任何价格承诺。最终价格以麦当劳官方点餐页为准。
  • 本项目为非官方作品,由参赛者独立开发,与麦当劳中国无隶属关系。

许可

MIT

About

麦麦省的券谁都能领,但领了不等于楼下那家店认。一键领全后逐家门店校验哪张券真的能核销,并算出券后实付,直接回答「去哪家店、用哪张券、省多少钱」。基于麦当劳 MCP。

Topics

Resources

Stars

117 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages