Mcd Cn Assistant logo

Mcd Cn Assistant

Community
junxchan54-maker
mcd-cn-assistant

麦当劳中国官方 MCP 智能助手。当用户提到麦当劳、金拱门、麦乐送、到店取餐、麦咖啡、麦麦省、优惠券、领券、活动日历、麦当劳活动、品牌联名、联名款、联名周边、限定、IP合作、积分、麦麦商城、抽奖、点餐、下单、比价、怎么点最划算、拼单、群点、聚餐点餐、办公室下午茶、夜宵拼单、多人点餐、分摊等,优先使用本 skill。四大能力:①获取最新活动推送(查询当月营销活动日历并摘要推送);②联名关注推送(盯联名/限定活动:按 config/keywords.json 中的关键词筛选活动并推送,默认关键词「联名」+ 同义词扩展,支持对话增删关键词);③最优惠点餐(门店→菜单→领券→算价的全链路比价,输出应付金额最低的组合);④多人群点聚合(聚餐拼单:代录全员餐品→满减凑单→券归属→公共费用分摊(配送费+打包费)→自动生成每人账单,组织者单账户统一结算)。**点餐入口会先主动询问「单人还是多人拼单」,命中多人即转入④,无需用户自己提出。**另含社交媒体场景六项:隐藏吃法一键还原(文案/截图解析→单品映射→特调/备注→下单)、穷鬼套餐凑单演算、周边联名抢货雷达(按需扫店+麦金卡随单购优化;无实时库存接口)、参数化营养搭配(热量/蛋白/控糖约束)、晒单卡片生成、天气与场景感应推送。

Overview

Publisherjunxchan54-maker
Repositorymcd-cn-assistant
Skill namemcd-cn-assistant
Stars
382
Forks
9
Bundled files
14
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 14 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by junxchan54-maker on GitHub. Read the source before you install it.

Installation

Install the Mcd Cn Assistant AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/junxchan54-maker/mcd-cn-assistant/tree/main
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/junxchan54-maker/mcd-cn-assistant.git \
  .claude/skills/mcd-cn-assistant
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Mcd Cn Assistant in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Mcd Cn Assistant on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Mcd Cn Assistant is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

麦当劳中国 MCP 助手(mcd-cn-assistant)

麦当劳中国官方远程 MCP 服务的封装技能,覆盖活动推送、联名关注、最优惠点餐、多人群点聚合四条业务主线,以及面向社交媒体场景的隐藏吃法还原 / 穷鬼套餐演算 / 周边抢货雷达 / 参数化营养搭配 / 晒单卡片 / 场景感应推送六项扩展能力。

核心交互约定:所有点餐请求都从同一个入口进入——Agent 会先主动问一句"单人还是多人拼单",再据此分流到能力三(最优惠点餐)或能力四(多人群点聚合)。多人拼单不是"用户得自己想到才有的隐藏功能"。见第 3 节。

能力总览与实测边界:第 4~7 节为四大主线;第 8 节为社交媒体场景六项。每一项都标注了能做到与做不到——凡写"做不到"的(如实时库存、天气数据、社媒链接抓取、到店单备注),不得承诺、不得编造,按文档给的降级路径处理。

1. 前置依赖与工具寻址

  • 依赖已配置的远程 MCP 服务 mcd-mcp(Streamable HTTP,https://mcp.mcd.cn,需 Authorization: Bearer <你的 MCP Token>)。
  • 接入方式见 docs/mcp-setup.md。若 Token 仍是占位符 ${MCD_MCP_TOKEN} 未替换,或返回 401 / 403,需引导用户:
    1. 前往 https://open.mcd.cn/mcp 登录并申请自己的 MCP Token;
    2. 把 MCP 客户端配置里的 ${MCD_MCP_TOKEN} 占位符替换为使用者自己的真实 Token(注意保留 Bearer 前缀);
    3. 在客户端中信任 / 启用该服务(多数客户端不会自动生效)。

    本仓库已脱敏,不含任何真实 Token;所有占位符都需使用者自行替换。

  • 工具调用名形如 mcp__mcd-mcp__<tool-name>(如 mcp__mcd-mcp__campaign-calendar)。若列表中找不到工具,先确认服务是否已被信任启用,而不是改用其它数据源。
  • 完整工具清单见 references/mcd-tools.md。
  • 能力四(多人群点聚合)的订单结构、分摊算法与账单模板见 references/group-order.md。
  • 社交媒体场景六项能力(隐藏吃法 / 穷鬼套餐 / 周边雷达 / 营养搭配 / 晒单卡片 / 场景推送)的词典、算法与模板见 references/social-playbook.md。

2. 硬性规则(必须遵守)

  1. 写操作必须二次确认:create-order、party-order-create、mall-create-order、auto-bind-coupons、cancel-order、draw-lottery、delivery-create-address 等会产生费用、消耗积分或改变账户状态的调用,必须先向用户列清明细并获得明确同意,严禁静默执行或"顺手"下单。
  2. 下单前必须先算价:一律以 calculate-price 的返回为准,不要自行心算金额、优惠或配送费。
  3. 先取时间:涉及日期、当月活动、可预约日期时,先调用 now-time-info 获取当前日期,避免使用模型内置时间。
  4. 限流:每个 Token 每分钟最多 600 次请求,超出返回 429。串行调用、缓存本次会话已获得的结果,避免重复查询同一门店/菜单。
  5. 金额展示统一用 ¥,保留两位小数。
  6. 点餐入口主动询问是否多人拼单:任何点餐请求在定位门店前,必须先问"单人还是多人拼单"(见第 3 节),不得等用户自己提出,也不得默认按单人处理。
  7. 商品编码必须按「门店 × 渠道」现取:外送菜单编码与到店不同(巨无霸 到店 1100 / 外送 901100;麦香鸡 1450 / 901450),且不同门店在售商品可能不同。严禁跨渠道、跨门店复用编码或价格;每次先 query-meals 再算价。
  8. 特调(modification)按 key 规则传参:选中项用 selectedKey;未选中但该组有 unselectedKey 的项也必须一并传入(用 unselectedKey)。calculate-price 不回显特调结果,只能确认不报错,不得据此向用户断言"已生效"。
  9. 免费配件不是商品:番茄酱 / 糖 / 胡椒粉 / 空杯 / 奶球等无法加购,只能进 create-order 的 remark;而 remark 仅 orderType=2(外送)可用、最多 50 字。到店单改为给用户到店话术,不得虚构参数。
  10. 不承诺没有的能力:MCP 无门店库存接口、无天气接口、抓不到社媒链接内容(实测小红书链接只返回登录墙)。凡问到此三类,按第 8 节与第 9 节的降级路径处理,不得编造库存数字、气温降雨或笔记内容。
  11. 社媒卡片 / 文案里的数字必须真实:价格来自 calculate-price,热量来自 list-nutrition-foods;没查过就不写,不为好看而编造。

3. 点餐入口:下单前必须主动询问「单人 / 多人拼单」

红线:任何进入点餐 / 下单流程的请求("帮我点个麦当劳""中午吃什么""买份早餐""下午茶"),在澄清基本需求之后、定位门店之前,Agent 必须主动问一句是单人还是多人拼单——不得等用户自己提出来。这是能力三与能力四的分流闸口,也是本 skill 的关键交互点。

询问话术(一句话自然问出即可,不要做成问卷):

这单是你自己一个人吃,还是帮几个人一起点(拼单)?拼单的话我可以代录大家想吃的、帮你凑满减、把配送费和打包费算清楚,最后出一张「每人应付多少」的账单。

路由判定:

用户回答走向
"就我自己""单人""一人份""给我点一份"能力三 · 最优惠点餐(第 6 节)
"帮 XX 点""几个人一起""拼单""群点""办公室/同事/同学/室友一起"能力四 · 多人群点聚合(第 7 节)
含糊不清或未表态(如"随便点点")再确认一次(单人还是多人),不要默认按单人处理

入口免问的例外:若用户在同一句话里已明确表达群体诉求,视为已答复,直接进入能力四(可顺带确认人数),不要重复问第二遍。

主动识别信号(命中任一 → 在入口按群体意图确认,或直接进入能力四):拼单、群点、一起点、帮大家点、多人、几个人、N 人份、办公室、同事、同学、室友、宿舍、家庭、聚餐、下午茶、夜宵拼单、AA、算账、分账、账单、每人多少。

忌:

  • 问一次就够——用户答复过就不再追问;
  • 用户已明确单人(如"我就想喝杯咖啡")时不再提拼单,也不反复推销;
  • 不得把"用户没提"当成"单人":入口的默认动作是问一句,而不是默认单人。这正是本节点要修正的问题。

4. 能力一:获取最新活动推送

触发:用户问"最近有什么活动""麦当劳有什么优惠/新品""活动日历""这个月有什么"。

流程:

  1. now-time-info → 拿到当前年月。
  2. campaign-calendar → 获取当月营销活动日历,返回进行中 / 往期 / 未来三类。
  3. 可选增强:available-coupons(麦麦省可领券)、query-my-coupons(我已有的券)。
  4. 按"进行中 → 即将开始"分组摘要输出,略过往期(除非用户点名要看)。

输出格式(每条一行):

状态活动名称起止时间一句话参与方式渠道/入口

末尾补一句「需要我盯着联名款 / 限定活动,有新的就推给你吗?」引导用户进入能力二。

5. 能力二:联名活动关注推送(关键词机制驱动)

定位:这是"只看我关心的那几条"的能力。默认瞄准联名 / 限定 / IP 合作这类最容易错过开售时点的活动,但底层是通用关键词匹配——用户换成"新品""早餐""周边"同样成立。

关键词来源:本 skill 的 config/keywords.json → follow_keywords(默认:["联名"]),并参考其中的 synonyms 做同义扩展匹配(联动 / 限定 / 合作款 / 联名款 / IP合作 / 品牌合作 / co-brand / 联名活动)。

「联动」必须留在同义词里:麦当劳对 IP 合作的官方文案常写「联动」而非「联名」(如「麦当劳联动G-DRAGON」)。2026-10-13 实测:同义词缺「联动」时该活动被整条漏推,而它的联名食品(龙焰鸡腿堡)在菜单里明明可以买到——漏推代价是实的。已知残留边界:同系列活动但标题与描述均不含关键词的(如「韩式风味蘸酱」,仅描述含"getGD同款")仍不会命中,此时应回退到当日全量日历逐条讲给用户,不要为它把词放宽到「同款」这类过泛词(会误伤「心形薯饼同款比心」等无关活动)。

执行流程(推送任务与被追问时均执行):

  1. 读取 config/keywords.json。若文件不存在,用默认关键词重建。
  2. now-time-info → campaign-calendar(必要时叠加 available-coupons)。
  3. 用关键词对活动名称 + 活动描述 + 标签做不区分大小写的命中匹配,支持同义词扩展(如"联名"≈"合作款 / 联名款 / IP合作 / 品牌合作")。
  4. 按活动名去重:campaign-calendar 会把同一条活动按排期日 / 结束日重复返回多次(实测 2026-10-17:「麦当劳 X PEACEMINUSONE 棒球帽」在 10-13 与 10-17 各行一次、「麦当劳联动G-DRAGON」在 10-16 与 10-17 各行一次、「韩式风味蘸酱」在 10-17 与 10-18 各行一次)。同一活动名只保留一条,状态按"进行中 > 即将开始 > 往期"取最高优先级的那次出现;往期一律不推(除非用户点名要看)。
  5. 只推送去重后命中的活动;无命中时明确回复:今日无命中关键词「X」的新活动,不要用无关活动凑数。
  6. 定时推送由外部自动化任务触发(建议每日 09:00,见 config/keywords.json 的 push_time),本 skill 只负责"查询 + 筛选 + 组织推送内容"。

推送文案结构(先经步骤 4 去重,同一活动只出现一行):

🎉 麦当劳活动关注推送 | <日期>
命中关键词:<关键词列表>
—— 进行中 ——
· <活动名>  <起止时间>
  <一句话说明>
—— 即将开始 ——
· ...
无命中关键词时直接说明,不凑数。

关键词维护(对话式):

  • 用户说"关注一下XX""加上关键词XX" → 追加到 follow_keywords,去重。
  • 用户说"不再关注XX" → 从 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

三条硬结论:

  1. 周边能买,走 query-meals → calculate-price → create-order 主链路即可,不需要积分商城。
  2. 加购 15 天麦金卡体验卡(¥9.90)几乎总是更划算:周边降 ¥5 + 免配送费 + 免打包费,实测净省 ¥1.10~¥12.10。calculate-price 会自动把 521234 麦金卡体验卡(15天) 和归零的配送/打包费写进 productList,照抄返回值即可,不要自己拼价格。
  3. 周边随门店和渠道变化:同一时刻上海陆家嘴门店的到店菜单里没有帽/徽章(只有 521946 旋旋星愿贴 ¥3.9 这类低价贴纸),深圳外送菜单里有。所以不能说"附近买不到",必须先按目标门店 + 渠道实拉 query-meals 再下结论。

仍做不到的事(不要承诺):mall-points-products 类目 2>8(周边产品)实测只有 3 项且全部过期(罗技键鼠 8-21、Nike Book 2 联名款 6-5、酸黄瓜吧唧 8-14),积分商城换不到联名周边;且 MCP 没有任何门店库存查询工具,无法回答"这家店还有没有货"(详见能力七)。

6. 能力三:最优惠点餐

目标:在满足用户需求(想吃什么 / 人数 / 预算 / 就餐方式)的前提下,给出应付金额最低的组合。

严格按序执行:

  1. 澄清需求:吃什么、几人份、预算、堂食(到店取餐/得来速)还是外送、是否预约。其中"几人份"必须来自第 3 节的入口询问——若用户答"多人拼单",本能力即终止并改走能力四;只有确认是单人(或用户明确只要一人份)才继续往下走。
  2. now-time-info 获取当前时间。
  3. 定位门店:
    • 到店/堂食 → query-nearby-stores(需用户提供或确认地址);团餐再叠加 query-meal-assistance。
    • 外送 → delivery-query-addresses 取地址 → delivery-query-stores 取可配送门店;无地址时先征得同意再 delivery-create-address。
    • 门店营业状态必须逐家展示(2026-10-28 实测):列表中标注每家的 businessStatus 与营业时段(businessStartTime~businessEndTime)。全部未营业时如实告知"附近到店门店均已歇业",并列出最近营业的一家及其开门时间;外送是另一条可选通道,由用户自行决定是否转外送(仅作信息告知,不强行改写用户已选的方式)。注意:到店预约时段里的「宵夜」档可能 22:46 就结束(实测西湖银泰「宵夜 22:14 至 22:46」),别被档位名误导成"通宵有宵夜"。
  4. 盘券(最优惠的关键):
    • available-coupons 看麦麦省当前可领券;
    • 有可领券且用户同意 → auto-bind-coupons 一键领券;
    • query-my-coupons 看账户已有券;query-store-coupons 看当前门店可用券。
    • 记录每张券的适用条件(门槛、指定商品、第二份半价、限渠道等)。
  5. 看菜单:query-meals(分类 / 餐品编码 / 标签 / 优惠价);套餐内容或换购选项用 query-meal-detail。
    • 深夜时段专属内容(2026-10-28 实测):外送菜单在深夜会出现「麦麦深夜送」分类(实测:四拼小食可乐餐 ¥49.9 / 原价 ¥81、深夜吃鸡堡堡桶 ¥88 / 原价 ¥140)。当前时间落在外送夜市时段(大致 17:30~次日 05:30,以 delivery-query-stores 返回的 reservationTimeOptions 为准)时,主动提示该分类。
    • 时段空档提示:外送预约时段可能不覆盖当前时刻(实测 10-28 夜市档为「00:30 至 05:29」,00:00~00:29 是空档)。立即点单通常不受影响(实测可正常算价);但用户若要预约,应告知可约的最早时段。
    • 多人场景先看现成 N 人餐:菜单「多人分享餐」分类有双人/三人/四人餐,比拼单各自叠加往往更省(实测畅享吃鸡三人餐 ¥86 vs 三人各自点 ¥135.5,差 ¥49.7),代录前先提示一句。
  6. 枚举组合:围绕券的适用条件构造候选方案(单品券方案、满减凑单方案、第二份半价方案等),至少 2 个候选,最多不超过 4~5 个以避免超限流。
  7. 逐个算价:对每个候选调用 calculate-price(把已选券一并带上),拿到 商品金额 / 配送费 / 优惠金额 / 应付总价。
  8. 择优输出:主推应付最低的方案,另列 1~2 个备选与差价,并说明"为什么它最省"(哪张券起的作用)。
  9. 用户确认后才调用 create-order 下单,返回订单详情与支付链接。

输出格式:

方案商品组合使用券商品金额优惠配送费应付
✅ 最省......¥..-¥..¥..¥..
备选......¥..-¥..¥..¥..

要点:

  • 「第二份半价 / 买一送一 / 满减」这类券只有凑到门槛才生效,必须真的把组合跑一遍 calculate-price 验证,不能凭券面文字判断。
  • 券有使用门槛与限渠道,选品时必须满足其条件,否则该方案作废。
  • 券专享商品必须带券算价:部分餐品的 productCode 只在某张券下可售(如"XX 早餐两件套"),不带 couponId/couponCode 调用 calculate-price 会返回 price:0 且 productList 为空数组。这不是报错,而是"该商品不单独售卖"——此时应带上对应券再算,而不是判定商品下架。
  • 外送价 ≠ 到店价:同一餐品在两个渠道的菜单价不同(实测:脆薯饼 到店 ¥8.5 / 外送 ¥9.5;猪柳蛋麦满分 到店 ¥18 / 外送 ¥18.5),严禁跨渠道复用价格,每次都必须从当前 orderType 的 query-meals 重新取值。
  • 外送编码也可能 ≠ 到店编码(2026-10-16 实测):巨无霸 到店 1100 / 外送 901100;麦香鸡 1450 / 901450。用错编码会让 calculate-price 返回 price:0、productList 为空——这与"券专享商品没带券"的现象一模一样,但根因不同,排查时先确认编码是否来自当前渠道的 query-meals。
  • 到店单基本没有满减档位(2026-10-16 实测):到店 ¥94 的篮子 discount:0、无 enjoyable。满减主要在外送 / 团餐场景,别对到店单承诺凑满减。
  • 外送单还有打包费:外送(orderType=2)除配送费外还会产生打包服务费(packingPrice,且可能自带打包优惠),算总价时必须计入。
  • 若用户明确"只要某单品",则退化为:该单品可用券中优惠最大的组合。
  • 关注热量/营养时可叠加 list-nutrition-foods。

7. 能力四:多人群点聚合(聚餐拼单)

触发:① 入口询问的答复为"多人 / 拼单"(见第 3 节:点餐前必须主动问一句,这是本能力最主要的触发路径,不依赖用户自己提出);② 用户直接表达群体点单诉求,如"帮大家点麦当劳""办公室下午茶拼单""加班夜宵一起点""宿舍/家庭聚餐点餐""群里点单帮我算账""几个人一起点怎么划算"等。

能力四不是"用户提了才有"的可选项。只要入口确认是多人,必须按本能力走完整流程(尤其"算账"环节),不得退化成"把 N 份餐加进购物车"。

定位(必须先向用户讲清):MCP 为单账户鉴权,本能力是组织者模式——全体成员的餐品由下单人在会话内代录,最后用下单人自己的账户统一结算,其他人按账单向下单人支付。严禁模拟登录、代理登录或索取任何成员的账号 / 密码 / 验证码。收款由组织者自行完成(微信群收款 / 本人收款码),本 Skill 不代收款项、不生成官方收款码。

数据结构、分摊算法与账单模板见 references/group-order.md,实现时必须遵循其中定义。

阶段一 · 开单:

  1. 澄清:就餐方式(外送 / 到店取)、门店或地址、大致人数、分摊偏好;
  2. 分摊偏好三项:公共费用(配送费 + 打包费;均摊 / 按消费比例 / 指定人承担)、优惠券省额(归下单人 / 平摊)、是否接受凑单建议;
  3. 门店与地址沿用能力三第 3 步链路;
  4. 创建订单会话文件 <workspace>/.workbuddy/group-orders/yyyymmdd-hhmm-<N>人.json,回显订单标识,方便后续轮次续单。

阶段二 · 收单:

  • 支持随时增改撤:"张三 麦辣鸡腿堡×1 可乐×1""李四跟张三一样""王五撤销";
  • 代录前先给一句多人餐提示(2026-10-28 实测):菜单「多人分享餐」有现成 N 人餐,通常比拼单各自叠加更省(实测三人餐 ¥86 vs 各自点 ¥135.5);深夜时段还有「麦麦深夜送」专属分类。提示后仍按各人意愿代录,不强行改单;
  • 每次变动后增量回显聚合列表:共 N 人 / M 件 / 小计 ¥X,若接近满减档位则附「距下一档还差 ¥Y」;
  • 重复提醒:多人点相同餐品时自动合并展示数量,并问一句"是否需要分开包装";
  • 餐品单价一律取自当前渠道的 query-meals / query-meal-detail,不得使用记忆价(外送与到店菜单价不同,见第 6 节要点)。

阶段三 · 算账(成员确认"收完了"后才进入):

  1. 盘券沿用能力三第 4 步(下单人账户);
  2. 满减凑单:对全员总价比对满减档位;若加购小额单品(派 / 圆筒等)可跨档且净支付更低,给出建议——必须整体送 calculate-price 实算验证「加购后总支出 < 不加购总支出」,征得同意才加入清单,绝不自动加购;若 calculate-price 未返回 enjoyable/balance,说明当前订单无可跨档位,直接说明"无凑单空间",不要臆造档位;
  3. 券归属:用下单人账户券参与 calculate-price,账单明确标注「券省 ¥X 归下单人」或「平摊每人减 ¥Y」;
  4. 公共费用分摊:以 calculate-price 返回的配送费 deliveryPrice + 打包费 packingPrice 之和为准,按选定规则计算每人明细(算法含尾差兜底,见参考文档 3.3/3.4);
  5. 小计口径(易错):账单"小计"列对用了券的成员要用券前基准价(现价 + 该券省额),否则"券省"会在小计里被重复扣减,导致合计与实付差额正好等于券省额;
  6. 分摊总原则:每人应付之和必须严格等于实付总额(尾差落在最后一人)。

阶段四 · 成单与结算:

  1. 生成账单:每人(餐品明细 / 券前小计 / 分摊券省 / 分摊公共费 / 应付)+ 合计行 + 优惠归属说明 + 凑单判定结论(模板见参考文档 4.1);
  2. 对话内输出 Markdown 账单;组织者需要时可生成单文件 HTML 账单(内联样式,可嵌入组织者本人的收款码图片)供分享;
  3. 组织者对账单确认后,按能力三第 9 步下单(写操作二次确认红线不变,单账户结算);
  4. 收款:账单给出每人应付金额,组织者用微信「群收款」(逐个按金额)或自己的收款码收款。

异常处理:

  • 成员中途加单 / 撤单:未下单前随时回到阶段二重算;
  • 下单时券失效:create-order 报错即停止并回滚提示,不自动重试扣款;
  • 有人不付款:账单即为凭据,不做任何催收、代扣或垫付建议。

8. 社交媒体场景能力(能力五 ~ 十)

以下六项围绕"刷爆社交媒体的麦当劳玩法"设计——覆盖小红书 / 抖音 / 微博 / B 站 / 公众号等各平台流行的麦当劳爆款,统称"社媒爆款"。用户从哪个平台看到并不重要:粘贴文案或发截图即可解析,Agent 不依赖任何平台接口、不登录任何平台账号。(小红书只是这类玩法最集中的平台,本节能力对全部平台一视同仁。)

共同前提:只要最终要落到下单,就仍然受第 3 节点餐入口(先问单人 / 多人拼单)与第 2 节硬性规则(写操作二次确认、下单前必须 calculate-price 实算)约束,新能力不豁免任何红线。

输入层三种形态与实测边界:

用户给的输入能否解析做法
直接粘贴的社媒文案(小红书 / 抖音 / 微博 / B 站等任一平台)✅直接从文本提取单品与配件
截图 / 照片✅走本地多模态读图,提取文字与单品
社媒链接(实测 xiaohongshu.com/explore/...、xhslink.com/...)❌实测抓不到:只返回登录墙(页面仅含"取消 / 允许")→ 引导改为粘贴文案或发截图,不要反复重试抓取

8.1 能力五:爆款"隐藏吃法"一键还原

定位:把"薯条 + 冰淇淋""苹果派 + 麦旋风爆浆""热红茶 + 免费奶球 = 自制港奶""麦乐鸡 + 薯条 + 两包胡椒粉 + 两包辣椒酱 + 一包糖 = 摇摇乐"这类社媒爆款,还原成可下单的订单。

流程:

  1. 解析:从文案 / 截图里抽出三类要素——① 基础单品(可加购的商品);② 特调要求(走酱、去冰、换燕麦奶等,可用 modification 真做到);③ 免费配件(多要两包番茄酱 / 糖 / 胡椒粉 / 空杯 / 奶球,不是商品,无法加购)。
  2. 映射菜单:query-meals 拿当前门店 + 渠道的商品编码。必须按 orderType 分别取码(外送编码与到店不同)。
  3. 分类处理:
    • 特调 → query-meal-detail 读 modification,按 key 规则(选中用 selectedKey、未选且有 unselectedKey 的必须一并传 unselectedKey)传入 calculate-price / create-order;
    • 免费配件 → 只能进 remark(见下);
    • 菜单里没有的单品 → 明说"这家店 / 这个渠道没有",给替代单品或换店建议,不要虚构。
  4. 算价下单:calculate-price → 展示 → 用户确认 → create-order(写操作二次确认不变)。

免费配件与 remark 的硬边界(最容易踩的坑):

  • create-order 的 remark 仅 orderType=2(外送)场景有意义,最多 50 字;到店自取(orderType=1)没有备注入口。
  • 因此:外送单 → 自动把配件要求写进 remark(如"麦乐鸡薯条摇摇乐:请给 2 包胡椒粉、2 包番茄酱、1 包糖,多谢!");到店单 → 改为给用户一句到店话术让他取餐时跟店员说,并说明 MCP 侧无法代填。
  • 备注里不要写支付、改价、退单等无效诉求;50 字内优先写"数量 + 品类"。

已知映射实例(完整词典见 references/social-playbook.md):

  • "走酱鱼柳包" → 麦香鱼 + modification 取消 100126 麦香鱼酱(真能做到,不是备注);
  • "港式奶茶" → 锡兰红茶 3505 实测 supportModify=false,加不了奶球;能"正规走特调"的是小杯鲜萃咖啡 520689(¥11),默认自带 120550 奶油球 + 120551 白砂糖(均 price 0)。红茶的奶球只能进备注 / 到店话术,别承诺能特调;
  • "无糖版 XXX" → 饮料换 无糖可口可乐(实测 +¥0,热量 0 大卡)。到店与外送实现不同:到店可乐 9900008751 是 rounds 选配商品,必须用 roundList 传 3021 无糖可口可乐小杯;外送的无糖可乐是独立商品 903071,直接换码;
  • "多要两包胡椒粉" → 只能 remark(外送)或到店话术。

8.2 能力六:"社交媒体风"穷鬼套餐 / 神仙组合穷尽演算

定位:用自然语言约束(预算上限、必须有肉 / 主食 / 无糖饮料、手里有张满 30 减 10)让 Agent 凑出最优组合。

流程:

  1. 结构化约束:把用户的话拆成硬约束(预算 ≤X、必须包含某类、热量 ≤Y)与软目标(越便宜越好 / 蛋白越高越好)。
  2. 盘券:query-store-coupons(唯一返回 couponId/couponCode 的接口,query-my-coupons 与 available-coupons 都不返回 ID、无法直接用于算价),记录每张券的门槛、指定商品、渠道限制;要领券先征得同意。
  3. 枚举候选:从当前渠道 query-meals 里按约束挑 2~5 个候选组合;优先用套餐(套餐通常比单点叠加便宜),需要换购选项时 query-meal-detail。
  4. 逐个真算:每个候选都送 calculate-price(带券传 couponId/couponCode),以返回值排序,严禁心算。
  5. 给结论:输出"应付最低"方案 + 一句为什么(用到了哪张券、省多少),并说明原价 vs 实付。

硬边界:

  • 到店单基本没有满减档位:实测到店 ¥94 的篮子 discount:0、无 enjoyable。满减主要出现在外送 / 团餐场景。
  • 用户手里可能根本没有满减券:实测该账户 6 张券全是商品券 / 早餐券,无"满 30 减 10"这类满减券。遇到"帮我凑满减"先 query-store-coupons 核实,没有就明说,不能顺着用户的话术臆造一张券。
  • 硬约束可能根本不可满足,要敢说做不到:实测"≤20 元 + 有肉 + 有主食 + 无糖饮料"在该门店菜单下无解(最便宜主食麦香鸡 ¥19.5,再加任意饮料必超 20)。正确做法:宣告不可满足 → 给"最接近"方案 → 说清"放松哪一条就能满足"(放松预算到 ¥30.5 即得麦香鸡 + 无糖可乐)。不得为凑数把饮料偷偷去掉,也不许把纯净水算成无糖饮料。
  • 无档位就明说: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 为准。

8.3 能力七:周边 / 联名 / 限定款"抢货雷达"

能做到:

  • 按需扫店:对用户指定的 1~N 家门店逐一 query-meals,看目标周边是否在售(实测编码:521954 联名复古棒球帽、521955 联名徽章、521743 薯条脆卜卜毛绒周边、521946 旋旋星愿贴)。周边随门店和渠道变化,同一时刻上海某店到店菜单没有帽/徽章、深圳外送菜单有,所以必须先扫再下结论。
  • 一键锁单:确认在售后走 calculate-price → 用户确认 → create-order。抢限量款时提前把门店、商品编码、withOrder 参数备好,减少往返。
  • 麦金卡随单购优化:实测加购 521234 麦金卡体验卡(15 天)¥9.90 后,周边降 ¥5、配送费与打包费归零,几乎总是更省(净省 ¥1.10~¥12.10)。calculate-price 会自动把体验卡和归零费用写进 productList,照抄返回值。

做不到(不要承诺):

  • ❌ 实时库存查询:35 个工具里没有任何门店库存接口,"这家店还有几顶帽"无法回答。
  • ❌ 持续监控 / 补货提醒:无法后台轮询;只能做"用户问一次、扫一次"的按需查询,并明确告知这是查询时点的在售状态,不是实时库存。
  • ❌ 积分商城换周边:mall-points-products 类目 2>8 实测仅 3 项且全部过期。

话术要点:用户要"监控"时,先给按需扫描结果,再说明边界,并建议:想稳拿限量款,直接下单锁单比监控更可靠(MCP 侧锁单即生成真实订单)。

8.4 能力八:减脂期 / 打工人"参数化营养买手"

定位:按"热量 ≤450 大卡、蛋白质 >25g、控糖、去酱"等参数组合出定制订单。

数据源与流程:

  1. 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)等。
  2. 在表里按约束筛候选 → 回 query-meals 确认该门店在售及现价 → calculate-price 实算。
  3. 特调降卡:query-meal-detail 的 modification 可取消酱料(巨无霸 100116 巨无霸酱、麦香鱼 100126 麦香鱼酱)、改冰量(标准/去冰/多冰/少冰)、换燕麦奶(+¥2)。注意:营养表按标准份计,取消酱料能省的热量不会自动反映在表里,需在结论里注明"已去酱,实际热量略低于表中值"。

硬边界:

  • 营养表是标准份数据,改特调 / 换小份大份后不会自动重算,不要谎称精确;
  • 表中同名项可能重复(如"小杯玉米杯""纯牛奶"出现多次),取值一致即可,别当成不同商品;
  • 套餐的营养 ≠ 各子项简单相加(有烹饪方式差异),给区间并说明是估算;
  • 热量约束是近似满足,结论里写"约 XXX 大卡"。

8.5 能力九:晒单卡片一键生成

定位:点完单 / 想分享时,生成社交媒体风格的卡片 + 文案,纯本地产出,不消耗 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/social-card-demo.svg(900×1200 竖版)。

文案风格:短句 + emoji + 具体数字 + 行动号召。模板与示例见 references/social-playbook.md 第 5 节。红线:文案里的价格 / 热量 / 省钱数字必须来自本次真实订单与 calculate-price / 营养表,不得为好看而编造;用户没做过营养查询就不编热量。

8.6 能力十:天气与场景感应式推送

能做到(基于 now-time-info 的日期 / 星期 / 时刻):

  • 时段场景:早餐时段推早餐卡 / 9.9 元早餐两件套;下午茶时段推麦旋风 / 派;夜市时段(实测门店 reservationTimeOptions 里有"夜市 17:30 至 23:30")推炸鸡小食。
  • 星期场景:周五下班推"打工人周五福利"(自动带上麦乐鸡 + 特调饮料);周末推"麦麦周末"专享(实测外送菜单有 麦麦周末 分类与 9900013854 麦麦炸鸡5拼 促销)。
  • 活动叠加:与能力一 / 能力二联动,命中联名或限定时优先推。

做不到:

  • ❌ 天气:MCP 无天气工具,拿不到气温 / 降雨 / 降温。用户说"今天下雨"→ 可以据此推荐热饮热食,但不要自称查了天气,也不要编造温度。
  • ❌ 定时自动推送到点:由外部自动化任务触发(建议每日 09:00,同能力二),本 skill 只负责"判断场景 + 组织推送内容"。

9. 常见问题处理

现象处理
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 只给日期与星期,无天气数据源 → 可做日期/时段场景推送(周五下班、早餐/夜市时段),天气需用户自述或外部数据,不要编造气温降雨

10. 兼容性

本 skill 不绑定特定 Agent 框架,全程使用官方工具名描述流程,可接入任何支持 MCP 的框架(Claude Code / Cursor / Cline / Cherry Studio / Trae / Kiro / VSCode / WorkBuddy 等)。

config/keywords.json 的读写依赖文件系统权限;若运行环境无文件权限,可把关键词直接写在对话上下文中,其余流程不变。

第 8 节各能力对运行环境的额外依赖:截图解析需客户端支持把图片传入对话(多模态);社媒链接解析已实测不可用,不依赖任何额外能力;晒单卡片产物为本地 SVG / HTML 文件,需要文件写权限。

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Mcd Cn Assistant AI skill do?

麦当劳中国官方 MCP 智能助手。当用户提到麦当劳、金拱门、麦乐送、到店取餐、麦咖啡、麦麦省、优惠券、领券、活动日历、麦当劳活动、品牌联名、联名款、联名周边、限定、IP合作、积分、麦麦商城、抽奖、点餐、下单、比价、怎么点最划算、拼单、群点、聚餐点餐、办公室下午茶、夜宵拼单、多人点餐、分摊等,优先使用本 skill。四大能力:①获取最新活动推送(查询当月营销活动日历并摘要推送);②联名关注推送(盯联名/限定活动:按 config/keywords.json 中的关键词筛选活动并推送,默认关键词「联名」+ 同义词扩展,支持对话增删关键词);③最优惠点餐(门店→菜单→领券→算价的全链路比价,输出应付金额最低的组合);④多人群点聚合(聚餐拼单:代录全员餐品→满减凑单→券归属→公共费用分摊(配送费+打包费)→自动生成每人账单,组织者单账户统一结算)。**点餐入口会先主动询问「单人还是多人拼单」,命中多人即转入④,无需用户自己提出。**另含社交媒体场景六项:隐藏吃法一键还原(文案/截图解析→单品映射→特调/备注→下单)、穷鬼套餐凑单演算、周边联名抢货雷达(按需扫店+麦金卡随单购优化;无实时库存接口)、参数化营养搭配(热量/蛋白/控糖约束)、晒单卡片生成、天气与场景感应推送。

Why use Mcd Cn Assistant on TypingMind?

Because you install it once and use it with any model. Mcd Cn Assistant is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Mcd Cn Assistant in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/junxchan54-maker/mcd-cn-assistant/tree/main. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Mcd Cn Assistant?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Mcd Cn Assistant?

As many as you like. As long as a model supports skills, you can use Mcd Cn Assistant with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Mcd Cn Assistant AI skill free?

It is published on GitHub by junxchan54-maker. Check the repository for licensing terms. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇