🍟 麦当劳中国官方 MCP 智能助手技能:把 35 个原子工具编排成 4 条业务流 —— 活动推送 · 联名关注 · 最优惠点餐 · 多人群点聚合账单。算价用 calculate-price 真算,下单必二次确认。|McDonald's China MCP agent skill: campaigns, collab watch, best-value ordering, group bill splitting.
# Add to your Claude Code skills
git clone https://github.com/junxchan54-maker/mcd-cn-assistantGuides for using ai agents skills like mcd-cn-assistant.
See how mcd-cn-assistant compares with popular alternatives.
mcd-cn-assistant is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by junxchan54-maker. 🍟 麦当劳中国官方 MCP 智能助手技能:把 35 个原子工具编排成 4 条业务流 —— 活动推送 · 联名关注 · 最优惠点餐 · 多人群点聚合账单。算价用 calculate-price 真算,下单必二次确认。|McDonald's China MCP agent skill: campaigns, collab watch, best-value ordering, group bill splitting. It has 58 GitHub stars.
mcd-cn-assistant's catalog security scan is still queued. You can run an instant dependency and prompt-injection check now with the "Scan for vulnerabilities" button above.
Clone the repository with "git clone https://github.com/junxchan54-maker/mcd-cn-assistant" and add it to your Claude Code skills directory (see the Installation section above). mcd-cn-assistant ships a SKILL.md manifest, so compatible agents can discover and load it automatically.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh mcd-cn-assistant against similar tools.
No comments yet. Be the first to share your thoughts!
Available after the catalog security scan passes.
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
The deep catalog scan for this skill is still queued. Run an instant dependency check now instead.
麦当劳中国官方远程 MCP 服务的封装技能,覆盖活动推送、联名关注、最优惠点餐、多人群点聚合四条业务主线,以及面向小红书场景的隐藏吃法还原 / 穷鬼套餐演算 / 周边抢货雷达 / 参数化营养搭配 / 晒单卡片 / 场景感应推送六项扩展能力。
核心交互约定:所有点餐请求都从同一个入口进入——Agent 会先主动问一句"单人还是多人拼单",再据此分流到能力三(最优惠点餐)或能力四(多人群点聚合)。多人拼单不是"用户得自己想到才有的隐藏功能"。见第 3 节。
能力总览与实测边界:第 4~7 节为四大主线;第 8 节为小红书场景六项。每一项都标注了能做到与做不到——凡写"做不到"的(如实时库存、天气数据、小红书链接抓取、到店单备注),不得承诺、不得编造,按文档给的降级路径处理。
mcd-mcp(Streamable HTTP,https://mcp.mcd.cn,需 Authorization: Bearer <你的 MCP Token>)。docs/mcp-setup.md。若 Token 仍是占位符 ${MCD_MCP_TOKEN} 未替换,或返回 401 / 403,需引导用户:
${MCD_MCP_TOKEN} 占位符替换为使用者自己的真实 Token(注意保留 Bearer 前缀);本仓库已脱敏,不含任何真实 Token;所有占位符都需使用者自行替换。
mcp__mcd-mcp__<tool-name>(如 mcp__mcd-mcp__campaign-calendar)。若列表中找不到工具,先确认服务是否已被信任启用,而不是改用其它数据源。references/mcd-tools.md。references/group-order.md。references/xhs-playbook.md。create-order、party-order-create、mall-create-order、auto-bind-coupons、cancel-order、draw-lottery、delivery-create-address 等会产生费用、消耗积分或改变账户状态的调用,必须先向用户列清明细并获得明确同意,严禁静默执行或"顺手"下单。calculate-price 的返回为准,不要自行心算金额、优惠或配送费。now-time-info 获取当前日期,避免使用模型内置时间。¥,保留两位小数。1100 / 外送 901100;麦香鸡 1450 / 901450),且不同门店在售商品可能不同。严禁跨渠道、跨门店复用编码或价格;每次先 query-meals 再算价。modification)按 key 规则传参:选中项用 selectedKey;未选中但该组有 unselectedKey 的项也必须一并传入(用 unselectedKey)。calculate-price 不回显特调结果,只能确认不报错,不得据此向用户断言"已生效"。create-order 的 remark;而 remark 仅 orderType=2(外送)可用、最多 50 字。到店单改为给用户到店话术,不得虚构参数。calculate-price,热量来自 list-nutrition-foods;没查过就不写,不为好看而编造。红线:任何进入点餐 / 下单流程的请求("帮我点个麦当劳""中午吃什么""买份早餐""下午茶"),在澄清基本需求之后、定位门店之前,Agent 必须主动问一句是单人还是多人拼单——不得等用户自己提出来。这是能力三与能力四的分流闸口,也是本 skill 的关键交互点。
询问话术(一句话自然问出即可,不要做成问卷):
这单是你自己一个人吃,还是帮几个人一起点(拼单)?拼单的话我可以代录大家想吃的、帮你凑满减、把配送费和打包费算清楚,最后出一张「每人应付多少」的账单。
路由判定:
| 用户回答 | 走向 |
|---|---|
| "就我自己""单人""一人份""给我点一份" | 能力三 · 最优惠点餐(第 6 节) |
| "帮 XX 点""几个人一起""拼单""群点""办公室/同事/同学/室友一起" | 能力四 · 多人群点聚合(第 7 节) |
| 含糊不清或未表态(如"随便点点") | 再确认一次(单人还是多人),不要默认按单人处理 |
入口免问的例外:若用户在同一句话里已明确表达群体诉求,视为已答复,直接进入能力四(可顺带确认人数),不要重复问第二遍。
主动识别信号(命中任一 → 在入口按群体意图确认,或直接进入能力四):拼单、群点、一起点、帮大家点、多人、几个人、N 人份、办公室、同事、同学、室友、宿舍、家庭、聚餐、下午茶、夜宵拼单、AA、算账、分账、账单、每人多少。
忌:
触发:用户问"最近有什么活动""麦当劳有什么优惠/新品""活动日历""这个月有什么"。
流程:
now-time-info → 拿到当前年月。campaign-calendar → 获取当月营销活动日历,返回进行中 / 往期 / 未来三类。available-coupons(麦麦省可领券)、query-my-coupons(我已有的券)。输出格式(每条一行):
| 状态 | 活动名称 | 起止时间 | 一句话参与方式 | 渠道/入口 |
|---|
末尾补一句「需要我盯着联名款 / 限定活动,有新的就推给你吗?」引导用户进入能力二。
定位:这是"只看我关心的那几条"的能力。默认瞄准联名 / 限定 / IP 合作这类最容易错过开售时点的活动,但底层是通用关键词匹配——用户换成"新品""早餐""周边"同样成立。
关键词来源:本 skill 的 config/keywords.json → follow_keywords(默认:["联名"]),并参考其中的 synonyms 做同义扩展匹配(联动 / 限定 / 合作款 / 联名款 / IP合作 / 品牌合作 / co-brand / 联名活动)。
「联动」必须留在同义词里:麦当劳对 IP 合作的官方文案常写「联动」而非「联名」(如「麦当劳联动G-DRAGON」)。2026-10-13 实测:同义词缺「联动」时该活动被整条漏推,而它的联名食品(龙焰鸡腿堡)在菜单里明明可以买到——漏推代价是实的。已知残留边界:同系列活动但标题与描述均不含关键词的(如「韩式风味蘸酱」,仅描述含"getGD同款")仍不会命中,此时应回退到当日全量日历逐条讲给用户,不要为它把词放宽到「同款」这类过泛词(会误伤「心形薯饼同款比心」等无关活动)。
执行流程(推送任务与被追问时均执行):
config/keywords.json。若文件不存在,用默认关键词重建。now-time-info → campaign-calendar(必要时叠加 available-coupons)。campaign-calendar 会把同一条活动按排期日 / 结束日重复返回多次(实测 2026-10-17:「麦当劳 X PEACEMINUSONE 棒球帽」在 10-13 与 10-17 各行一次、「麦当劳联动G-DRAGON」在 10-16 与 10-17 各行一次、「韩式风味蘸酱」在 10-17 与 10-18 各行一次)。同一活动名只保留一条,状态按"进行中 > 即将开始 > 往期"取最高优先级的那次出现;往期一律不推(除非用户点名要看)。今日无命中关键词「X」的新活动,不要用无关活动凑数。config/keywords.json 的 push_time),本 skill 只负责"查询 + 筛选 + 组织推送内容"。推送文案结构(先经步骤 4 去重,同一活动只出现一行):
🎉 麦当劳活动关注推送 | <日期>
命中关键词:<关键词列表>
—— 进行中 ——
· <活动名> <起止时间>
<一句话说明>
—— 即将开始 ——
· ...
无命中关键词时直接说明,不凑数。
关键词维护(对话式):
follow_keywords,去重。follow_keywords 移除。config/keywords.json 并更新 updated_at,然后回显最新完整列表确认。联名周边的购买渠道(2026-10-16 实测修正,取代 10-13 的错误结论):
⚠️ 史误记录:10-13 曾据此写下"联名周边无法通过 MCP 购买、必须引导去 APP"。该结论是错的——当时只测了上海一家门店的到店自取菜单就下了全局判断。10-16 测外送菜单后发现周边就在菜单里、可以正常算价下单。教训:菜单能力必须按「门店 × 渠道」分别实测,不能用一个门店的一个渠道推断全局。
联名周边(棒球帽 / 徽章 / 丝巾 / 毛绒周边等)以普通可售商品形式出现在 query-meals 返回里,discountType 为 随单购麦金卡优惠,并带 withOrder: {membershipCode: "106", specId: "880"}。实测编码(深圳金丰城外送,2026-10-16):521954 麦当劳联名复古棒球帽(¥39.90,麦金卡价 ¥34.90)、521955 麦当劳联名徽章、521743 薯条脆卜卜毛绒周边(¥29.90 / ¥24.90)。
实测算价(外送 · 深圳金丰城 1421053):
| 方案 | 明细 | 实付 |
|---|---|---|
| 裸买周边 | 棒球帽 ¥39.90 + 配送费 ¥6.00 | ¥45.90 |
| 周边 + 麦金卡随单购(推荐) | 棒球帽 ¥34.90 + 麦金卡体验卡(15 天)¥9.90 + 配送费 ¥0 + 打包费 ¥0 | ¥44.80 |
| 周边 + 餐 + 麦金卡随单购 | 棒球帽 ¥34.90 + 巨无霸 ¥29.00 + 体验卡 ¥9.90 + 配送费 ¥0 + 打包费 ¥0 | ¥73.80 |
三条硬结论:
query-meals → calculate-price → create-order 主链路即可,不需要积分商城。calculate-price 会自动把 521234 麦金卡体验卡(15天) 和归零的配送/打包费写进 productList,照抄返回值即可,不要自己拼价格。521946 旋旋星愿贴 ¥3.9 这类低价贴纸),深圳外送菜单里有。所以不能说"附近买不到",必须先按目标门店 + 渠道实拉 query-meals 再下结论。仍做不到的事(不要承诺):mall-points-products 类目 2>8(周边产品)实测只有 3 项且全部过期(罗技键鼠 8-21、Nike Book 2 联名款 6-5、酸黄瓜吧唧 8-14),积分商城换不到联名周边;且 MCP 没有任何门店库存查询工具,无法回答"这家店还有没有货"(详见能力七)。
目标:在满足用户需求(想吃什么 / 人数 / 预算 / 就餐方式)的前提下,给出应付金额最低的组合。
严格按序执行:
now-time-info 获取当前时间。query-nearby-stores(需用户提供或确认地址);团餐再叠加 query-meal-assistance。delivery-query-addresses 取地址 → delivery-query-stores 取可配送门店;无地址时先征得同意再 delivery-create-address。available-coupons 看麦麦省当前可领券;auto-bind-coupons 一键领券;query-my-coupons 看账户已有券;query-store-coupons 看当前门店可用券。query-meals(分类 / 餐品编码 / 标签 / 优惠价);套餐内容或换购选项用 query-meal-detail。calculate-price(把已选券一并带上),拿到 商品金额 / 配送费 / 优惠金额 / 应付总价。create-order 下单,返回订单详情与支付链接。输出格式:
| 方案 | 商品组合 | 使用券 | 商品金额 | 优惠 | 配送费 | 应付 |
|---|---|---|---|---|---|---|
| ✅ 最省 | ... | ... | ¥.. | -¥.. | ¥.. | ¥.. |
| 备选 | ... | ... | ¥.. | -¥.. | ¥.. | ¥.. |
要点:
calculate-price 验证,不能凭券面文字判断。productCode 只在某张券下可售(如"XX 早餐两件套"),不带 couponId/couponCode 调用 calculate-price 会返回 price:0 且 productList 为空数组。这不是报错,而是"该商品不单独售卖"——此时应带上对应券再算,而不是判定商品下架。orderType 的 query-meals 重新取值。1100 / 外送 901100;麦香鸡 1450 / 901450。用错编码会让 calculate-price 返回 price:0、productList 为空——这与"券专享商品没带券"的现象一模一样,但根因不同,排查时先确认编码是否来自当前渠道的 query-meals。discount:0、无 enjoyable。满减主要在外送 / 团餐场景,别对到店单承诺凑满减。orderType=2)除配送费外还会产生打包服务费(packingPrice,且可能自带打包优惠),算总价时必须计入。list-nutrition-foods。触发:① 入口询问的答复为"多人 / 拼单"(见第 3 节:点餐前必须主动问一句,这是本能力最主要的触发路径,不依赖用户自己提出);② 用户直接表达群体点单诉求,如"帮大家点麦当劳""办公室下午茶拼单""加班夜宵一起点""宿舍/家庭聚餐点餐""群里点单帮我算账""几个人一起点怎么划算"等。
能力四不是"用户提了才有"的可选项。只要入口确认是多人,必须按本能力走完整流程(尤其"算账"环节),不得退化成"把 N 份餐加进购物车"。
定位(必须先向用户讲清):MCP 为单账户鉴权,本能力是组织者模式——全体成员的餐品由下单人在会话内代录,最后用下单人自己的账户统一结算,其他人按账单向下单人支付。严禁模拟登录、代理登录或索取任何成员的账号 / 密码 / 验证码。收款由组织者自行完成(微信群收款 / 本人收款码),本 Skill 不代收款项、不生成官方收款码。
数据结构、分摊算法与账单模板见 references/group-order.md,实现时必须遵循其中定义。
阶段一 · 开单:
<workspace>/.workbuddy/group-orders/yyyymmdd-hhmm-<N>人.json,回显订单标识,方便后续轮次续单。阶段二 · 收单:
query-meals / query-meal-detail,不得使用记忆价(外送与到店菜单价不同,见第 6 节要点)。阶段三 · 算账(成员确认"收完了"后才进入):
calculate-price 实算验证「加购后总支出 < 不加购总支出」,征得同意才加入清单,绝不自动加购;若 calculate-price 未返回 enjoyable/balance,说明当前订单无可跨档位,直接说明"无凑单空间",不要臆造档位;calculate-price,账单明确标注「券省 ¥X 归下单人」或「平摊每人减 ¥Y」;calculate-price 返回的配送费 deliveryPrice + 打包费 packingPrice 之和为准,按选定规则计算每人明细(算法含尾差兜底,见参考文档 3.3/3.4);阶段四 · 成单与结算:
异常处理:
create-order 报错即停止并回滚提示,不自动重试扣款;以下五项围绕"刷爆小红书的麦当劳玩法"设计。共同前提:只要最终要落到下单,就仍然受第 3 节点餐入口(先问单人 / 多人拼单)与第 2 节硬性规则(写操作二次确认、下单前必须 calculate-price 实算)约束,新能力不豁免任何红线。
输入层三种形态与实测边界:
| 用户给的输入 | 能否解析 | 做法 |
|---|---|---|
| 直接粘贴的小红书文案 | ✅ | 直接从文本提取单品与配件 |
| 截图 / 照片 | ✅ | 走本地多模态读图,提取文字与单品 |
小红书链接(xiaohongshu.com/explode/...、xhslink.com/...) |
❌ | 实测抓不到:只返回登录墙(页面仅含"取消 / 允许")→ 引导改为粘贴文案或发截图,不要反复重试抓取 |
定位:把"薯条 + 冰淇淋""苹果派 + 麦旋风爆浆""热红茶 + 免费奶球 = 自制港奶""麦乐鸡 + 薯条 + 两包胡椒粉 + 两包辣椒酱 + 一包糖 = 摇摇乐"这类小红书爆款,还原成可下单的订单。
流程:
modification 真做到);③ 免费配件(多要两包番茄酱 / 糖 / 胡椒粉 / 空杯 / 奶球,不是商品,无法加购)。query-meals 拿当前门店 + 渠道的商品编码。必须按 orderType 分别取码(外送编码与到店不同)。query-meal-detail 读 modification,按 key 规则(选中用 selectedKey、未选且有 unselectedKey 的必须一并传 unselectedKey)传入 calculate-price / create-order;remark(见下);calculate-price → 展示 → 用户确认 → create-order(写操作二次确认不变)。免费配件与 remark 的硬边界(最容易踩的坑):
create-order 的 remark 仅 orderType=2(外送)场景有意义,最多 50 字;到店自取(orderType=1)没有备注入口。remark(如"麦乐鸡薯条摇摇乐:请给 2 包胡椒粉、2 包番茄酱、1 包糖,多谢!");到店单 → 改为给用户一句到店话术让他取餐时跟店员说,并说明 MCP 侧无法代填。已知映射实例(完整词典见 references/xhs-playbook.md):
modification 取消 100126 麦香鱼酱(真能做到,不是备注);3505 实测 supportModify=false,加不了奶球;能"正规走特调"的是小杯鲜萃咖啡 520689(¥11),默认自带 120550 奶油球 + 120551 白砂糖(均 price 0)。红茶的奶球只能进备注 / 到店话术,别承诺能特调;无糖可口可乐(实测 +¥0,热量 0 大卡)。到店与外送实现不同:到店可乐 9900008751 是 rounds 选配商品,必须用 roundList 传 3021 无糖可口可乐小杯;外送的无糖可乐是独立商品 903071,直接换码;remark(外送)或到店话术。定位:用自然语言约束(预算上限、必须有肉 / 主食 / 无糖饮料、手里有张满 30 减 10)让 Agent 凑出最优组合。
流程:
query-store-coupons(唯一返回 couponId/couponCode 的接口,query-my-coupons 与 available-coupons 都不返回 ID、无法直接用于算价),记录每张券的门槛、指定商品、渠道限制;要领券先征得同意。query-meals 里按约束挑 2~5 个候选组合;优先用套餐(套餐通常比单点叠加便宜),需要换购选项时 query-meal-detail。calculate-price(带券传 couponId/couponCode),以返回值排序,严禁心算。硬边界:
discount:0、无 enjoyable。满减主要出现在外送 / 团餐场景。query-store-coupons 核实,没有就明说,不能顺着用户的话术臆造一张券。calculate-price 未返回 enjoyable/balance 时,直接说"当前无凑单空间",不臆造档位。discount 按券原价口径计:实测冰美式中杯菜单促销价 ¥11.9,用「9.9 元」券后 price: 990、discount: 1310(相对 productOriginalPrice 2300 算的,不是 2300 − 1190)。向用户解释"省了多少"别直接引用 discount 字段。calculate-price 证明"加购后总支出 < 不加购",征得同意才加入,绝不自动加购。packingPrice: 110 但 productList 里「打包服务费」那行 subtotal: 0,逐行 subtotal 相加会漏掉打包费。账单一律以顶层 price 为准。能做到:
query-meals,看目标周边是否在售(实测编码:521954 联名复古棒球帽、521955 联名徽章、521743 薯条脆卜卜毛绒周边、521946 旋旋星愿贴)。周边随门店和渠道变化,同一时刻上海某店到店菜单没有帽/徽章、深圳外送菜单有,所以必须先扫再下结论。calculate-price → 用户确认 → create-order。抢限量款时提前把门店、商品编码、withOrder 参数备好,减少往返。521234 麦金卡体验卡(15 天)¥9.90 后,周边降 ¥5、配送费与打包费归零,几乎总是更省(净省 ¥1.10~¥12.10)。calculate-price 会自动把体验卡和归零费用写进 productList,照抄返回值。做不到(不要承诺):
mall-points-products 类目 2>8 实测仅 3 项且全部过期。话术要点:用户要"监控"时,先给按需扫描结果,再说明边界,并建议:想稳拿限量款,直接下单锁单比监控更可靠(MCP 侧锁单即生成真实订单)。
定位:按"热量 ≤450 大卡、蛋白质 >25g、控糖、去酱"等参数组合出定制订单。
数据源与流程:
list-nutrition-foods(无入参)一次性拿全量营养表,字段:productName / energyKj / energyKcal / protein / fat / carbohydrate / sodium / calcium(单位分别为 kJ、kcal、g、g、g、mg、mg)。实测约 180 项,含 无糖可口可乐(0 kcal)、锡兰红茶(2 kcal)、苹果片(32 kcal)、麦香鱼(325 kcal / 蛋白 16g)等。query-meals 确认该门店在售及现价 → calculate-price 实算。query-meal-detail 的 modification 可取消酱料(巨无霸 100116 巨无霸酱、麦香鱼 100126 麦香鱼酱)、改冰量(标准/去冰/多冰/少冰)、换燕麦奶(+¥2)。注意:营养表按标准份计,取消酱料能省的热量不会自动反映在表里,需在结论里注明"已去酱,实际热量略低于表中值"。硬边界:
定位:点完单 / 想分享时,生成小红书风格的卡片 + 文案,纯本地产出,不消耗 MCP 调用。
卡片内容(用订单与算价结果填充):
query-meals 返回的 image 字段可直接引用);originalPrice/originalSubtotal)vs 实付(price/subtotal),高亮"立省 ¥X";list-nutrition-foods 的柱状 / 环形图(三大营养素占比);产出形态:单文件 HTML 或 SVG(内联样式、无外部依赖),与 assets/ 既有视觉资产同一套手法(手写矢量、静态帧完整、不启动浏览器渲染)。
交付前自检(必做):XML / HTML 合法性 + 逐条文本边界推算(CJK 记 1em、拉丁 0.55em、空格 0.3em),确认无左右下溢出;右对齐金额统一用 text-anchor="end"。现成样例见 assets/xhs-card-demo.svg(900×1200 竖版)。
文案风格:短句 + emoji + 具体数字 + 行动号召。模板与示例见 references/xhs-playbook.md 第 5 节。红线:文案里的价格 / 热量 / 省钱数字必须来自本次真实订单与 calculate-price / 营养表,不得为好看而编造;用户没做过营养查询就不编热量。
能做到(基于 now-time-info 的日期 / 星期 / 时刻):
reservationTimeOptions 里有"夜市 17:30 至 23:30")推炸鸡小食。麦麦周末 分类与 9900013854 麦麦炸鸡5拼 促销)。做不到:
| 现象 | 处理 |
|---|---|
| 401 / 工具全部不可用 | Token 无效、过期或未提供 → 引导更新 MCP 客户端配置,并确认已信任启用该服务 |
403 + 校验鉴权authToken必填! |
Authorization 头的值漏了 Bearer 前缀(只填了 Token 本身)→ 改为 Bearer <你的 MCP Token>;注意这里返回的是 403 而非 401,别漏查 |
| 429 | 触发限流 → 降低调用频率,复用已有结果 |
calculate-price 返回 price:0 / productList 为空 |
该餐品是券专享商品,没带券(不是下架、不是报错)→ 带上对应 couponId/couponCode 重新算价 |
| 外送算出的单价与到店不同 | 正常现象:外送与到店是两套菜单价(脆薯饼 到店 ¥8.5 / 外送 ¥9.5 等)→ 按当前 orderType 从 query-meals 重新取值,勿跨渠道复用 |
| 群点账单合计与实付对不上 | ① 漏了打包费(外送单除配送费外还有 packingPrice);② "小计"列对用券成员未用券前基准价,导致券省被重复扣减(差额恰好 = 券省额)→ 按阶段三第 5 条修正 |
| 用户没说几个人,就直接按单人下了单 | 违反第 3 节:点餐入口必须先主动问一句"单人还是多人拼单",未确认前不得默认单人 → 回退补问;若为多人,改走能力四(第 7 节) |
| 用户未给地址 | 先询问地址,再查门店 |
| 用户想取消订单 | query-order / order-list 定位订单 → 用户确认后 cancel-order |
| 想查积分 / 兑换 / 抽奖 | query-my-account、mall-points-products、query-lottery-info、draw-lottery(抽奖为写操作,须确认) |
| 群点有人想用自己的账户券 | 单账户结算下无法使用他人账户券 → 明确告知:本单只能用下单人账户券;他人可自行另点或由其提供等额现金折让(在账单备注,不改账单金额) |
| 群点成员要求直接登录他的账号下单 | 拒绝并解释:禁止模拟 / 代理登录;只能由组织者代录后用自己的账户结算 |
| 用户要买联名周边(棒球帽 / 徽章 / 丝巾) | 能买(2026-10-16 修正):周边就在 query-meals 里(如 521954 棒球帽、521955 徽章),走主链路下单;加购 521234 麦金卡体验卡(¥9.90)通常更省(周边降 ¥5 + 免配送/打包费)。随门店和渠道变化,须先实拉目标门店 + 渠道的菜单。做不到的是:积分商城换周边、查门店库存。详见第 5 节末与能力七 |
| 联名活动被漏推(如"麦当劳联动G-DRAGON") | 标题用的是「联动」不是「联名」→ 同义词表必须含「联动」;若仍漏(同系列活动但标题描述都不含关键词),回退到当日全量日历逐条讲,不要放宽到「同款」等过泛词 |
| 同一条联名活动被重复推送多次 | campaign-calendar 会按排期日 / 结束日把同一活动重复返回(实测 2026-10-17:棒球帽在 10-13 与 10-17 各行一次、G-DRAGON 在 10-16 与 10-17 各行一次)→ 必须按活动名去重,同一条只保留一行,状态取"进行中 > 即将开始 > 往期"的最高优先级;见第 5 节执行流程步骤 4 |
| 用户粘贴小红书链接解析隐藏吃法 | 小红书链接抓不到内容(实测只返回登录墙的「取消 / 允许」)→ 引导改为直接粘贴文案或发截图(截图走本地多模态读取),不要让用户反复发链接 |
| 隐藏吃法要"多要两包番茄酱 / 糖 / 胡椒粉" | 这类免费配件不是商品、无法加购,只能进订单 remark;而 remark 仅 orderType=2(外送)可用、最多 50 字 → 外送单自动写入;到店单改为给用户一句到店话术自行跟店员说 |
| 用户要求"去蛋黄酱 / 走酱" | 这是 modification 特调能真做到的(如麦香鱼 100126 麦香鱼酱、巨无霸 100116 巨无霸酱,用 unselectedKey 取消)→ 按 query-meal-detail 返回的 key 规则传参。注意:calculate-price 不回显特调结果,只能确认不报错 |
| 算出来的满减档位和用户说的不一样 | 到店单实测 discount:0、无 enjoyable(到店基本无满减档位);必须以 calculate-price 返回为准,未返回 enjoyable/balance 就明说"无凑单空间",不臆造档位 |
外送算价返回 price:0 / productList 为空 |
多半是用了到店菜单的商品编码——外送菜单编码与到店不同(巨无霸 到店 1100 / 外送 901100,麦香鸡 1450/901450)→ 按当前 orderType 重新 query-meals 取码 |
| 用户要"监控附近门店补货 / 一补货就提醒" | MCP 无门店库存工具,做不到持续监控 → 改为按需扫描:对目标门店逐一 query-meals 看周边是否在售,并说明这是"查询时点"而非"实时库存" |
| 用户要天气/下雨提醒点餐 | now-time-info 只给日期与星期,无天气数据源 → 可做日期/时段场景推送(周五下班、早餐/夜市时段),天气需用户自述或外部数据,不要编造气温降雨 |
本 skill 不绑定特定 Agent 框架,全程使用官方工具名描述流程,可接入任何支持 MCP 的框架(Claude Code / Cursor / Cline / Cherry Studio / Trae / Kiro / VSCode / WorkBuddy 等)。
config/keywords.json 的读写依赖文件系统权限;若运行环境无文件权限,可把关键词直接写在对话上下文中,其余流程不变。
第 8 节各能力对运行环境的额外依赖:截图解析需客户端支持把图片传入对话(多模态);小红书链接解析已实测不可用,不依赖任何额外能力;晒单卡片产物为本地 SVG / HTML 文件,需要文件写权限。
把麦当劳中国官方 MCP 工具,封装成一个开箱即用的 Agent 技能:活动不错过、优惠不放过、点餐不吃亏、群点不算账。
mcd-cn-assistant 是一个面向 AI Agent 的技能包(Skill),建立在麦当劳中国官方 MCP 服务(https://mcp.mcd.cn)之上。
麦当劳中国官方 MCP 提供了 30+ 个原子工具——查门店、查菜单、查券、领券、算价、下单、查积分、积分商城、积分抽奖、主题活动预约……但原子工具不等于能用的助手。直接用这些工具,用户需要自己记住几十个工具名、自己判断先调哪个后调哪个、自己组合券和商品算最便宜的方案,还得时刻提防 AI 擅自下单。
本项目做的事情是:把这堆原子工具编排成四条用户真正会用的业务流,并把安全边界写死。
| 用户的真实困扰 | 本项目的解法 |
|---|---|
| "这个月麦当劳有什么活动?" ——活动散落在 App 各处,懒得翻 | 能力一:一句话拉出当月活动日历,按「进行中 / 即将开始」分组摘要 |
| "我就想盯联名款,别的别烦我" ——原生工具只会返回全量活动 | 能力二:联名关注——自定义关键词 + 同义词扩展(含麦当劳官方常用的「联动」),只推命中项,还能每天定时自动推 |
| "联名活动倒是推给我了,可周边到底怎么买?" ——抢购时点稍纵即逝,哪家店有货说不清 | 能力七:逐门店扫菜单定位在售周边 → 直接锁单;并提示加购麦金卡体验卡反而更省(无实时库存接口,不假装能监控补货) |
| "到底怎么点最便宜?" ——券有门槛、有第二份半价、有满减,人脑算不过来 | 能力三:围绕券的适用条件枚举候选组合,逐个真算价再比价,主推应付金额最低方案 |
| "我压根不知道还能拼单" ——群点功能得用户自己想起来才会被触发 | 入口主动询问:任何点餐请求在选门店前,Agent 都会先问一句「单人还是多人拼单」,答多人即刻转入能力四,不依赖用户自己提出 |
| "办公室下午茶 8 个人拼单,算账算到下班" ——刷屏报菜名、满减没人凑、配送费打包费没人算、收钱更尴尬 | 能力四:群点聚合——代录全员餐品 → 满减凑单建议 → 券归属标注 → 公共费用分摊(配送费+打包费)→ 一张每人应付的清晰账单 |
| "AI 会不会自己把我钱花了?" | 设计红线:任何下单 / 领券 / 取消 / 抽奖等写操作,必须先列明细并获得用户显式同意 |
| "小红书爆款隐藏吃法,我懒得自己拆" ——不知道哪些能加购、哪些只能跟店员说 | 能力五:粘贴文案或发截图 → 自动拆成"能加购的单品 / 能改的特调 / 只能备注的免费配件"三类,外送单自动写好备注 |
| "我想凑个不超 20 块的穷鬼套餐" ——人脑凑不出最优解 | 能力六:自然语言约束 → 枚举候选 → 逐个 calculate-price 实算 → 给应付最低方案,不臆造满减档位 |
| "联名帽到底哪家店有货?帮我抢" | 能力七:逐门店扫菜单定位在售周边 → 直接锁单;并提示加购麦金卡体验卡反而更省(无实时库存接口,不假装能监控) |
| "减脂期想吃麦当劳,怎么配?" | 能力八:官方营养表按热量 / 蛋白 / 控糖约束组合,去酱、换无糖都是 +¥0 的真特调 |
| "吃完了想发小红书,懒得做图" | 能力九:用真实订单与营养数据生成晒单卡片 + 文案,数字不编造 |
统一入口(关键设计):能力三与能力四共用一个点餐入口——只要是点餐请求,Agent 在定位门店前会主动问一句「这单是你自己吃,还是帮几个人一起点(拼单)?」,再据此分流。多人拼单不需要用户自己想到,答一句"拼单"即可进入完整的分账流程;回答含糊时会再确认一次,不会默认按单人处理。
| 能力 | 触发场景 | 核心编排 |
|---|---|---|
| ① 最新活动推送 | "最近有什么活动""麦当劳有什么优惠" | now-time-info → campaign-calendar →(可选)available-coupons |
| ② 联名关注推送 | "关注一下联名""有联名款就推我""每天推给我" | 读 config/keywords.json → 拉活动 → 关键词+同义词命中筛选 → 只推命中项 |
| ③ 最优惠点餐 | "怎么点最划算""帮我点个到店取"(入口询问后确认为单人) | 定位门店 → 盘券 → 看菜单 → 枚举组合 → 逐个 calculate-price → 比价 → 确认后下单 |
| ④ 多人群点聚合 | 入口询问回答"多人 / 拼单",或直接说"办公室拼单""帮大家点,帮我算账" | 开单(分摊偏好)→ 收单(代录 + 重复提醒)→ 算账(满减凑单 + 券归属 + 公共费用分摊)→ 账单 → 确认后单账户结算 |
| 能力 | 触发场景 | 能做到 | 做不到(不承诺) |
|---|---|---|---|
| ⑤ 隐藏吃法一键还原 | 粘贴小红书文案 / 发截图:"薯条+冰淇淋""走酱鱼柳包""红茶+奶球=港奶" | 解析文案/截图 → 映射当前门店菜单 → 特调真传参(走酱、去冰、换无糖 +¥0)→ 算价下单;免费配件自动写进外送单备注 | 免费配件不是商品、无法加购;remark 仅外送单、≤50 字;小红书链接抓不到(登录墙) |
| ⑥ 穷鬼套餐演算 | "不超 20 块要有肉有主食有无糖饮料""我有张满 30 减 10" | 拆硬约束 → 盘券 → 枚举 2~5 候选 → 逐个 calculate-price 实算 → 输出应付最低 |
到店单基本无满减档位(实测 discount:0);无档位就明说,不臆造 |
| ⑦ 周边联名抢货雷达 | "附近哪家店能买联名帽""帮我抢限定套餐" | 按需扫店(逐门店 query-meals)→ 直接下单锁单 → 麦金卡随单购优化(实测加 ¥9.90 体验卡反而净省 ¥1.10~12.10) |
无实时库存接口、无法持续监控补货;积分商城换不到周边 |
| ⑧ 参数化营养搭配 | "450 大卡以内蛋白超 25g""控糖""酱汁去掉" | list-nutrition-foods 全表 → 按约束筛 → 特调降卡(去酱/换无糖 +¥0)→ 算价下单 |
营养表按标准份计,改特调后热量不会自动重算,结论只给约数 |
| ⑨ 晒单卡片生成 | "做张能发小红书的卡片" | 用真实订单与营养数据本地生成 SVG/HTML 卡片 + 小红书味文案 | 不消耗 MCP 调用;数字必须真实,没查过就不写 |
| ⑩ 天气与场景感应推送 | "周五下班吃什么""下雨天想喝热的" | 基于 now-time-info 的时段 + 星期推送(早餐/下午茶/夜市、周五福利、麦麦周末) |
无天气数据源;天气需用户自述,不编造气温降雨 |
完整词典、算法与模板见
references/xhs-playbook.md;真实对话示例见docs/examples.md示例 13~16。
flowchart TD
A["麦当劳中国 MCP 服务<br/>mcp.mcd.cn · Streamable HTTP · Bearer Token"]
A --> B1["能力一:最新活动推送"]
A --> B2["能力二:联名关注推送"]
A --> G["点餐统一入口<br/>先主动问:单人还是多人拼单?"]
G --> B3["能力三:最优惠点餐"]
G --> B4["能力四:多人群点聚合"]
B1 --> C1["now-time-info<br/>campaign-calendar<br/>available-coupons"]
B2 --> C2["config/keywords.json<br/>关键词 + 同义词扩展"]
B3 --> C3["门店 → 领券 → 菜单<br/>calculate-price 比价<br/>确认后 create-order"]
B4 --> C4["开单 → 收单聚合<br/>满减凑单 + 券归属 + 公共费用分摊<br/>每人账单 → 确认后单账户结算"]
C2 --> D["定时自动化<br/>每天 09:00 只读推送"]
A --> E1["小红书场景六项"]
E1 --> E2["⑤ 隐藏吃法还原:文案/截图解析<br/>→ 特调 modification + 外送 remark"]
E1 --> E3["⑥ 穷鬼套餐演算:约束拆解<br/>→ 多候选 calculate-price 实算"]
E1 --> E4["⑦ 周边雷达:逐门店扫菜单<br/>→ 麦金卡随单购优化 → 锁单"]
E1 --> E5["⑧ 营养搭配:list-nutrition-foods<br/>→ 去酱 / 换无糖 / 算价"]
E1 --> E6["⑨ 晒单卡片:本地生成 SVG<br/>⑩ 场景推送:时段 + 星期"]
style A fill:#5DCAA5,stroke:#0F6E56,color:#04342C
style G fill:#FAC775,stroke:#854F0B,color:#412402
style B1 fill:#9FE1CB,stroke:#0F6E56,color:#04342C
style B2 fill:#9FE1CB,stroke:#0F6E56,color:#04342C
style B3 fill:#9FE1CB,stroke:#0F6E56,color:#04342C
style B4 fill:#9FE1CB,stroke:#0F6E56,color:#04342C
style E1 fill:#FAC775,stroke:#854F0B,color:#412402
style E2 fill:#FFF4E0,stroke:#854F0B,color:#412402
style E3 fill:#FFF4E0,stroke:#854F0B,color:#412402
style E4 fill:#FFF4E0,stroke:#854F0B,color:#412402
style E5 fill:#FFF4E0,stroke:#854F0B,color:#412402
style E6 fill:#FFF4E0,stroke:#854F0B,color:#412402
style C1 fill:#E1F5EE,stroke:#5DCAA5,color:#085041
style C2 fill:#E1F5EE,stroke:#5DCAA5,color:#085041
style C3 fill:#E1F5EE,stroke:#5DCAA5,color:#085041
style C4 fill:#E1F5EE,stroke:#5DCAA5,color:#085041
style D fill:#FAC775,stroke:#854F0B,color:#412402
核心用户
| 用户画像 | 他们的诉求 |
|---|---|
| 麦当劳高频用户 / "麦门"爱好者 | 每周多次消费,关心活动与优惠,想用最少的钱吃到想吃的 |
| 联名 / IP 收集型用户 | 只为特定联名或限定周边消费,怕错过开售时间,需要"只推我关心的" |
| 群体点单组织者(办公室下午茶 / 加班夜宵 / 宿舍 / 带娃局 / 球队) | 每次群点都当"人肉计算器":刷屏报菜名记不住、满减没人凑、配送费打包费没人算、收钱最尴尬——需要一张"每人应付多少"的清晰账单 |
| 小红书重度用户 / "隐藏吃法"复刻党 | 每天刷爆款吃法和穷鬼套餐,想一键还原;刷到联名周边怕抢不到;减脂期想找低卡组合;吃完还想发张好看的卡片 |
| 不知道还能拼单的人 | 想帮同事/室友一起点,但不知道工具支持;本项目把"多人拼单"做成点餐入口的主动提问,用户只需答一句"拼单" |
| 偶尔想吃但怕买贵的人 | 不确定券怎么用、套餐怎么搭最划算,希望有人直接给结论 |
典型痛点
适用环境
mcd-cn-assistant/
├── README.md # 项目介绍 / 安装方法 / 使用示例 / 目标用户
├── CONTEST_DECLARATION.md # 参赛声明(官方文件,内容未改动)
├── MCP_INTEGRATION.md # MCP 集成说明:Server / Tool / 调用流程 / 业务价值
├── mcp-config.example.json # 脱敏配置示例(仅环境变量占位符)
├── workbuddy.md # WorkBuddy 开发上下文(WorkBuddy 专项奖励用)
├── SKILL.md # 技能主体(Agent 运行时加载)
├── LICENSE # MIT
├── assets/
│ ├── banner.svg # 顶部横幅(自绘动画 SVG)
│ └── cta-star.svg # 结尾 Star CTA 图
├── config/
│ └── keywords.json # 联名 / 活动关注关键词配置(能力二读取)
├── references/
│ ├── mcd-tools.md # 35 个 MCP 工具速查表 + 调用顺序 + 错误码 + 2026-10-16 实测要点
│ ├── group-order.md # 能力四:订单会话结构 + 分摊算法(尾差兜底)+ 账单模板
│ └── xhs-playbook.md # 小红书场景:隐藏吃法词典 + 凑单算法 + 营养子集 + 晒单模板
└── docs/
├── mcp-setup.md # MCP 接入说明(WorkBuddy / Cursor / Cherry Studio / Trae / Claude Code …)
└── examples.md # 四大能力 + 小红书六项的真实对话示例
前置条件:已取得麦当劳中国 MCP Token(在 https://open.mcd.cn/mcp 手机号登录 → 控制台 → 激活 → 复制)。
第 1 步:配置 MCP 服务(WorkBuddy 官方流程)
打开 WorkBuddy,在左侧边栏【专家·技能·连接器】,选中【连接器】页签;
点击右上角【自定义连接器】→【配置MCP】;
在打开的手动配置页面中填入以下的 JSON 内容:
{
"mcpServers": {
"mcd-mcp": {
"type": "streamablehttp",
"url": "https://mcp.mcd.cn",
"headers": {
"Authorization": "Bearer ${MCD_MCP_TOKEN}"
}
}
}
}
⚠️ 一定记得把
${MCD_MCP_TOKEN}替换为「你自己的」实际 MCP Token,点击【保存】!填入后请确认
Authorization的值已经是你的真实 Token(形如Bearer abc123...)——WorkBuddy 手动配置页填入的是字面值,不要保留${MCD_MCP_TOKEN}这个写法本身。
回到【自定义连接器】,将 mcd-mcp【启用】。
其他客户端(Cursor / Cherry Studio / Trae / VSCode / Claude Code)见 docs/mcp-setup.md。
📌 关于占位符:本仓库不含任何真实凭证,所有出现
${MCD_MCP_TOKEN}、<你的 MCP Token>的位置都需要你填入自己的 MCP Token。完整对照见 docs/mcp-setup.md · 占位符速查。
第 2 步:安装技能
将这段话复制给你的AI Agent(WorkBuddy、claw等): 帮我安装mcd-cn-assistant这个skill: 1、https://github.com/junxchan54-maker/mcd-cn-assistant/ 2、以后我说麦当劳下单相关的就调用mcd-cn-assistant这个skill 3、把仓库里 skill/mcd-cn-assistant 文件夹复制到用户级技能目录
把本仓库的 SKILL.md、config/、references/ 放进你所用客户端的技能目录。推荐 clone:
git clone https://github.com/<your-name>/mcd-cn-assistant.git ~/.workbuddy/skills/mcd-cn-assistant
各客户端的技能目录:
| 客户端 | 技能目录 | 说明 |
|---|---|---|
| WorkBuddy | ~/.workbuddy/skills/ |
用户级技能,全局可用;也可放项目内 .workbuddy/skills/ |
| Claude Code | ~/.claude/skills/ |
用户级技能 |
| 其他 MCP 客户端 | 以客户端文档为准 | 支持技能 / Rules 机制的目录 |
若你的客户端不支持技能目录机制,也可直接把
SKILL.md的内容作为系统提示词或项目 Rules 粘贴进去,流程完全一致。
第 3 步:验证
对 Agent 说一句:
用 mcd-cn-assistant 查一下这个月麦当劳有什么活动
能正常返回活动列表即接入成功。若报 401,说明 Token 无效或未提供;若报 429,说明触发了 600 次/分钟的限流。
你:帮我点个麦当劳,中午想吃点好的
Agent(澄清需求后,不会直接查门店,而是先问): 「这单是你自己一个人吃,还是帮几个人一起点(拼单)?拼单的话我可以代录大家想吃的、帮你凑满减、把配送费和打包费算清楚,最后出一张「每人应付多少」的账单。」
- 你答「就我自己」→ 进入能力三 · 最优惠点餐;
- 你答「我们部门 5 个人一起点」→ 进入能力四 · 多人群点聚合,接着确认人数、门店/地址与分摊偏好;
- 你答「我们几个人一起吃,但我自己付」→ 走能力三按整单找最省,顺带问一句要不要分摊账单;
- 你答得含糊(如「随便点点」)→ 再确认一次,不会默认按单人处理。
你:这个月麦当劳有