麦当劳官方 MCP 实战:让 AI 一句话点餐,价格走当次真实核价

一、它解决什么问题

点一顿饭的真实决策成本不在"吃什么",而在这几件事:

  • 当次菜单有哪些(每家店不同)
  • 整单多少钱(主食 + 小食 + 饮料,不是单品相加)
  • 券能不能用在这家店、这个时段
  • 口味约束(不辣、去冰、有糖/无糖)会不会被"更优推荐"悄悄改掉

麦当劳官方 MCP 提供了这些数据,但它给的是接口,不是决策。接口之间的组合、约束的优先级、缺数据时怎么办,得自己定。

二、核心链路

erlang 复制代码
用户一句话
  → query-nearby-stores   找到门店,让用户确认
  → query-meals           取这家店的当次菜单
  → calculate-price       逐份整单核价(不是估算)
  → list-nutrition-foods  补充已知钠/能量
  → 三个审阅角度(预算 / 营养 / 口味)收敛 → 最多三份方案

关键设计:只在一家店的当次数据里比较 。不同门店的菜单和价格不能混,所以数据里每条 plan 都带 store_code,校验时强制一致:

python 复制代码
if p.get("store_code") != data["store"]["code"]:
    raise ValueError("不能混用不同门店的报价。")

三、三个真实的坑

坑 1:Token 只从环境变量读,不走连接器

WorkBuddy 里配好了 MCP 连接器,但 CLI 实跑时仍然报错:

复制代码
本轮停止:请在本机设置 MCD_MCP_TOKEN 环境变量,不要公开 Token。

读源码才发现:命令行 live 模式只读 os.environ["MCD_MCP_TOKEN"],压根不走客户端的连接器配置。所以「装了技能」和「链路可用」是两件事。

正确做法是把 Token 只注入子进程环境,不打印、不落盘、不进命令行:

bash 复制代码
MCD_MCP_TOKEN="$(cat ~/.token)" python3 demo.py --live --store-code 1990xxx --expand \
  --budget 35 --taste no-spicy --side fries --ice none

坑 2:独立查询入口不能相互混用

第一版写成 --live --search-stores,直接失败关闭:

复制代码
本轮停止:独立查询入口不能相互混用,也不能与核价、快照保存或选择混用。

原因是 --search-stores 本身就是实时入口,只有逐份核价才需要 --live。程序宁可让你多打一个参数,也不猜你想干什么。

坑 3:缺参数就停,不拿示例数据顶替

css 复制代码
$ python3 demo.py --list-meals
本轮停止:请先选门店:--search-stores --city 城市 --keyword 地点,
        然后用 --store-code 编码;或显式指定已确认的 --plan 文件。

三条守卫都来自真实运行输出。它们的作用不是"友好提示",而是保证你看到的每个数字都来自这次真实调用。

四、真实核价长这样

某天实测,当次菜单 113 项,逐份核价后:

csharp 复制代码
[9900xxxx-4810-3050] 麦香鱼中套餐 · 中薯条 · 可乐中杯(去冰):¥33.50
    钠 721.0 mg · 能量 761.0 kcal   符合当前硬性条件
[9900xxxx-4810-3071] 麦香鱼中套餐 · 中薯条 · 无糖可口可乐中杯(去冰):¥33.50
    钠 756.0 mg · 能量 614.0 kcal   符合当前硬性条件
[9900xxxx-4810-3050] 双层吉士汉堡中套餐 · 中薯条 · 可乐中杯(去冰):¥34.00
    钠 1182.0 mg · 能量 865.0 kcal   符合当前硬性条件

预算、营养、口味三个角度最终收敛到同一份。说明这张表不是"挑一个最便宜的",而是在满足硬性条件的集合里做取舍。

五、怎么用

装 Skill 后,把这段话发给 AI 客户端(Token 换成自己的):

bash 复制代码
请装这个技能:github.com/polaris-smart/mcd-agent-gourmet
我的麦当劳 MCP Token 是:<贴你自己的 Token>,帮我接好官方 MCP 并设置 MCD_MCP_TOKEN,不要公开
帮我点一餐:35 元,不辣,要薯条,有糖可乐去冰,带走。

也可以先在浏览器里看免登录的历史数据体验:polaris-smart.github.io/mcd-agent-g...

六、边界

  • 只查询与核价,不领券、不下单、不支付
  • 历史快照不能当当前报价,--live 才是实时
  • 辣度分级、玩具、更多份量尚未验证;过敏信息请以官方渠道为准
  • 网页不收集 Token,不读设备定位

源码(Python 3.9+,零第三方依赖):github.com/polaris-sma...

如果这套思路对你有用,欢迎去仓库点个 Star:github.com/polaris-sma...

(本文同内容也发于腾讯云开发者社区)

相关推荐
技术卷1 天前
Windows 下自定义 MCP 踩坑:stdin 默认继承导致 CPython 启动阻塞
python·mcp·zcode
記億揺晃着的那天1 天前
基于 MCP 的 AI 协作工程技术搭建:从线上故障排查到闭环修复的工程实践
agent·devops·故障排查·mcp·后端架构
张张123y1 天前
2026 Agent 框架怎么选?拆 3 层底层逻辑(运行循环 / 记忆 / 工具协议)+ 一张决策表
linux·ubuntu·microsoft·langgraph·mcp·crewai·agent 框架
Danny转行做跨境2 天前
MCP 配置连不上?我把亚马逊选品数据的接入坑填了一遍
跨境电商·mcp·sorftime
老周聊架构2 天前
工具与 MCP:让 Agent 长出手脚
agent·mcp
小金的研发日志2 天前
ASP.NET 手搓 MCP 服务(四):刷新令牌的轮换与重放检测
mcp
Dumbness2 天前
写 MCP 服务器踩的坑:stdout 是协议通道,一行不带换行的日志就能让客户端超时
node.js·mcp
黑黑的脸蛋2 天前
同时用 Claude Code 和 Codex,我做了个 Agent 资产库:能预览、能投递、能追更新
ai编程·claude·mcp
xrlfreedom3 天前
MCP 面试高频考点:如何用 TypeScript SDK 设计带人工确认的高风险 Tool?
mcp·最小权限与审计日志·stdio 传输·typescript mcp sdk