Skip to content

About

帮有忌口的朋友在麦当劳安心点餐。 不吃猪肉、吃素、海鲜过敏、乳糖不耐、不吃辣、不吃酸黄瓜……说一句话,它就查遍整家门店的实时菜单,告诉你哪些放心点、哪些“去培根”就能吃、套餐里该换成什么,算好价再帮你下单。

Resources

Stars

121 stars

Watchers

0 watching

Forks

Repository files navigation

🍔 麦麦忌口管家 · mcd-diet-guard

帮有忌口的朋友在麦当劳安心点餐。 不吃猪肉、吃素、海鲜过敏、乳糖不耐、不吃辣、不吃酸黄瓜……说一句话,它就查遍整家门店的实时菜单,告诉你哪些放心点、哪些“去培根”就能吃、套餐里该换成什么,算好价再帮你下单。

基于 麦当劳 MCP Server 开发的 Skill,参加 麦当劳程序员创意开发大赛。


为什么需要它

有忌口的人点麦当劳,常见的麻烦是:

  • 看名字不一定看得出配料。“巨无霸”“汉堡包”是牛肉堡;“培根蔬萃双层牛堡”其实可以特调去掉培根——这些信息分散在详情和特调选项里,要一个个点开看。
  • 套餐默认搭配不一定适合每个人。“牛气满满套餐”固定配培根牛堡,“满分厚松饼堡双人餐”的主食可选项都是猪柳。
  • 早餐时段猪肉类餐品多。猪柳、火腿扒、图林根香肠……不吃猪肉的朋友早上需要更仔细地挑。
  • 拼单时每人忌口不同。一个清真、一个吃素、一个乳糖不耐,凑一单要反复对。
  • 过敏不敢赌。需要明确知道哪些是“没发现问题”,哪些“必须问清楚”。

麦当劳 MCP 的 query-meal-detail 会返回每个餐品可以“特调”的配料(培根、吉士、酸黄瓜、洋葱粒、麦香鸡酱……)以及套餐每一轮的可选子项。麦麦忌口管家就是把这些数据用起来:能去掉的帮你去掉,能换的帮你换,去不掉的直接告诉你别点。

它能做什么

功能 说明
🔍 整店扫描 拉取门店实时菜单 + 每个餐品详情,按忌口分成 ✅放心点 / 🔧特调后可点 / ⚠️需确认 / ❌不建议
🔧 自动特调 冲突配料可去掉时自动“去培根”“去吉士”“去酸黄瓜”;黑巧饮品自动“换燕麦奶”(含加价)
🍱 套餐智能换选 逐轮检查套餐子项:默认项能吃就保留,不能吃就换成差价最低的可选项;某一轮全踩雷则整套不推荐
👥 多人点餐 每人一个忌口,分别给推荐,再给出“全员都能吃”的拼单小食
🧾 一键生成下单参数 直接生成符合 MCP 规则的 calculate-price / create-order 商品参数(含特调 key、套餐 roundList)
💬 沟通卡 & 外送备注 到店给店员看的“点餐沟通卡”;外送自动生成 ≤50 字的忌口备注
✍️ 自定义忌口 除 16 种内置忌口外,任何“不吃XX”(香菜、番茄、芥末……)都能作为关键词参与判断

支持的内置忌口:不吃猪肉(含清真需求)、不吃牛肉、蛋奶素、纯素、五辛素、不吃海鲜/海鲜过敏、虾蟹过敏、鸡蛋过敏、乳糖不耐/牛奶过敏、无麸质、芝麻过敏、花生/坚果过敏、不吃辣、不吃葱蒜洋葱、不要咖啡因、不含酒精。

效果示例

和智能体对话

我:我朋友是回民不吃猪肉,帮他看看人民广场附近的麦当劳现在能点什么,最好是套餐。

麦麦忌口管家: 🍔 XX路餐厅 · 朋友(不吃猪肉) ✅ 放心点:巨无霸三件套 ¥37.5、板烧鸡腿堡三件套 ¥34.5、麦香鱼套餐 ¥34、大堡口福三件套 ¥22.9(默认鸡排堡)…… 🔧 特调后可点:培根蔬萃双层牛堡三件套 ¥36(汉堡去培根)、牛气满满套餐 ¥35(汉堡去培根) ❌ 不建议:猪柳蛋麦满分(主料猪柳,去不掉)……

清真饮食不只是“不含猪肉”,还涉及屠宰方式与交叉接触。麦当劳 MCP 不提供清真认证信息,这里只能帮你排除含猪肉成分的餐品。

要我把“板烧鸡腿堡三件套”加进购物车算个价吗?

命令行(使用仓库自带的离线样例数据)

$ python skills/mcd-diet-guard/scripts/mcd_diet.py scan --store 1000001 --diet 不吃猪肉 --fixture tests/fixtures/store_sample.json

## 麦麦忌口管家 · 门店 1000001 · 忌口:不吃猪肉
共 13 个餐品:✅ 7 · 🔧 2 · ⚠️ 0 · ❌ 4

### ✅ 放心点(7)
- 大堡口福三件套 ¥22.9 `9900015602`
- 不素之霸双层牛堡 ¥26.5 `4648`
- 巨无霸 ¥26.5 `1100`
- ……

### 🔧 特调后可点(2)
- **牛气满满套餐** ¥35 `9900009245`:培根蔬萃双层牛堡去培根
- **培根蔬萃双层牛堡** ¥25 `1106`:去培根

### ❌ 不建议(4)
- 满分厚松饼堡双人餐:「选择主食」只有不符合忌口的选项:枫糖风味厚松饼猪柳堡、枫糖风味厚松饼猪柳蛋堡
- 猪柳蛋麦满分:主料含猪肉(猪),无法去除
- 德式图林根香肠:主料含猪肉(香肠、图林根),无法去除
- ……
$ python skills/mcd-diet-guard/scripts/mcd_diet.py group --store 1000001 --fixture tests/fixtures/store_sample.json \
    --person "小王:清真" --person "阿杰:乳糖不耐,不吃酸黄瓜" --top 3

### 小王(不吃猪肉)
- 吉士蛋麦满分 ¥10 / 蘸酱炸鸡 ¥11.9 / 大堡口福三件套 ¥22.9
### 阿杰(不吃奶制品/乳糖不耐、不吃酸黄瓜)
- 蘸酱炸鸡 ¥11.9(「选择蘸酱」选日式鲜磨山葵酱,避开芝士酱)
- 大堡口福三件套 ¥22.9 / 培根蔬萃双层牛堡 ¥25
### 🍟 全员都能吃(适合拼单分享)
不素之霸双层牛堡¥26.5、大堡口福三件套¥22.9、蘸酱炸鸡¥11.9

plan 会生成可直接用于 calculate-price 的参数,例如“培根蔬萃双层牛堡 去培根”:

{"productCode": "1106", "quantity": 1, "modification": {"values": [
  {"code": "100136", "key": "0-1", "quantity": 1},
  {"code": "100160", "key": "0-1", "quantity": 1},
  {"code": "100168", "key": "0-1", "quantity": 1},
  {"code": "100214", "key": "0-1", "quantity": 1},
  {"code": "103386", "key": "0-0", "quantity": 1}
]}}

(103386 培根传 unselectedKey,其余配料保留。)

目标用户

  • 有饮食禁忌的人:不吃猪肉(包括有清真需求的朋友,工具会如实说明边界)、不吃牛肉、素食者。
  • 有食物过敏或不耐受的人:海鲜、蛋、奶、麸质、芝麻、坚果;乳糖不耐。
  • 口味挑剔的人:不吃辣、不吃洋葱、不吃酸黄瓜、晚上不想喝咖啡因。
  • 帮别人点餐的人:给朋友、同事、家人拼单,每个人忌口都不一样。

安装

1. 申请麦当劳 MCP Token

登录 麦当劳 MCP 开放平台 → 控制台 → 激活并复制 MCP Token。

2. 在智能体里配置 MCP

参考 mcp-config.example.json:

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

把 ${MCD_MCP_TOKEN} 换成你的 Token(或在支持环境变量的客户端里设置该变量)。不要把真实 Token 提交到任何仓库。

3. 安装 Skill

把 skills/mcd-diet-guard 整个文件夹放进智能体的技能目录(支持 SKILL.md 格式的智能体都可以使用,例如 WorkBuddy、Claude Code 等),然后直接用自然语言提需求即可。

4.(可选)命令行使用

只需要 Python 3.8+,无需安装任何第三方包:

git clone https://github.com/Addition2000/mcd-diet-guard.git
cd mcd-diet-guard
export MCD_MCP_TOKEN=你的Token          # Windows PowerShell: $env:MCD_MCP_TOKEN="你的Token"

S=skills/mcd-diet-guard/scripts/mcd_diet.py
python $S profiles                                         # 查看支持的忌口
python $S stores --city 上海 --keyword 人民广场             # 找门店,拿 storeCode
python $S scan  --store <storeCode> --diet 不吃猪肉          # 整店扫描
python $S scan  --store <storeCode> --diet 素食 --reservation "2026-10-26 08:00"   # 看明早早餐
python $S group --store <storeCode> --person "小王:清真" --person "小李:素食,不吃辣"
python $S plan  --store <storeCode> --diet 不吃猪肉 --code 9900009245 --price       # 生成参数并试算
python $S check 培根蔬萃双层牛堡 猪柳麦满分 --diet 不吃猪肉   # 离线按名称快速判断
python $S card  --diet 不吃猪肉,不吃辣 --order-type 2        # 沟通卡 + 外送备注

外送场景加 --order-type 2 --be-type 2 --be-code <beCode>(beCode 来自 delivery-query-stores)。所有命令都支持 --format json。

脚本只负责查询、判定、生成参数和试算,不会自己下单。下单由智能体在你明确确认后调用 create-order 完成,支付也由你本人完成。

工作原理

忌口(自然语言) ──► 忌口类型 + 自定义关键词
门店 ──► query-meals ──► 每个餐品 query-meal-detail
                              │
             ┌────────────────┴────────────────┐
         单品:名称 + 特调配料               套餐:逐轮逐个子项判定
             │                                  │
   主料冲突→❌  配料冲突且可去→🔧去掉       每轮挑默认/最低差价的可吃项
   可能含→⚠️   都没问题→✅                 某轮全冲突→❌
             └────────────────┬────────────────┘
                     推荐 ──► calculate-price ──► 用户确认 ──► create-order ──► query-order 核对

详细的 MCP 工具使用与调用流程见 MCP_INTEGRATION.md,判定规则写在 references/knowledge.json,可以自行扩充。

安全与边界

  • 不判断清真:只能排除含猪肉成分的餐品;清真还涉及屠宰方式与交叉接触,MCP 不提供相关认证信息,工具会明确告知。
  • 不是官方过敏原数据:结果基于餐品名称和 MCP 返回的可见配料推断,无法排除共用设备造成的交叉接触。过敏者只看名称时一律标为“需确认”,严重过敏请向门店确认。
  • 宁可错杀:识别不出主料的餐品不会被标为放心;“香肠”一律按含猪肉处理。
  • 下单前必须确认:生成参数、试算价格都不会产生订单;只有你说“确认下单”后智能体才会调用 create-order。
  • Token 不落盘:脚本只从环境变量 MCD_MCP_TOKEN 读取 Token。

项目结构

.
├── README.md                    # 本文件
├── CONTEST_DECLARATION.md       # 参赛声明(官方原文)
├── MCP_INTEGRATION.md           # 使用的 MCP Server / Tool / 调用流程 / 业务价值
├── mcp-config.example.json      # 脱敏的 MCP 配置示例(仅环境变量占位符)
├── .env.example
├── skills/mcd-diet-guard/
│   ├── SKILL.md                 # Skill 主说明:工作流程、判定规则、下单规则、安全规则
│   ├── scripts/mcd_diet.py      # 命令行工具(纯标准库 MCP 客户端 + 判定引擎)
│   └── references/knowledge.json# 成分标签、忌口类型与别名、特殊餐品规则
└── tests/
    ├── test_engine.py           # 离线单元测试
    └── fixtures/store_sample.json  # 从真实 MCP 返回精简的样例数据

测试

python -m unittest discover -s tests -v

测试覆盖:去培根特调参数、套餐换选、早餐猪肉主料拦截、换燕麦奶加价、自定义关键词、过敏场景降级、外送备注长度、MCP 返回解析等。样例数据取自麦当劳 MCP 的真实返回。生成的下单参数已用真实门店调用 calculate-price 验证(如“换燕麦奶”后价格正确增加 ¥2)。

免责声明

本项目为麦当劳程序员节创意开发大赛参赛作品,由参赛者独立开发,非麦当劳官方产品。项目输出仅供参考,不构成医疗、营养或其他专业建议;餐品信息、价格及供应状态以麦当劳官方渠道的实时结果为准。详见 CONTEST_DECLARATION.md。

License

MIT

About

帮有忌口的朋友在麦当劳安心点餐。 不吃猪肉、吃素、海鲜过敏、乳糖不耐、不吃辣、不吃酸黄瓜……说一句话,它就查遍整家门店的实时菜单,告诉你哪些放心点、哪些“去培根”就能吃、套餐里该换成什么,算好价再帮你下单。

Resources

Stars

121 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages