起因:菜单价和结账价不是一回事
我常点巨无霸套餐。菜单上写 ¥32.00,下单时却常常不是这个数。
查了麦当劳官方 MCP 才明白:菜单里的 currentPrice 可能带 discountType 条件(例如「随单购麦金卡优惠」),条件不成立时,calculate-price 返回的才是你真正要付的钱。
同一天、同一家店,我实测到两个数:
- 菜单展示价:¥32.00
- 官方核价:¥58.50
所以这个项目的第一条不是「帮你选」,而是只认官方当次核价:菜单价必须连同它的条件一起说清楚。
第二个发现:同样的东西,换个点法差 24.7%
同一家店、同一时刻:
| 点法 | 官方核价 |
|---|---|
| 单品直选(巨无霸 + 中薯条 + 可乐中杯) | ¥48.50 |
| 三件套(同样的三样) | ¥36.50 |
省 ¥12.00(24.7%)。这不是估算,是两次 calculate-price 的真实返回。
于是产品定义变了:不是「比较餐单」,是把菜单上的数字换成你真正要付的钱。
做出来的东西:一个答案,不是一张表
首屏只给一个答案,不让你在 N 份候选里做多目标权衡:
这顿就它了 👇
巨无霸三件套 · 套餐(巨无霸 + 中薯条 + 可乐中杯)
¥36.50 (门店)· 到店自取
比「单品直选」省 ¥12.00(24.7%)
点单卡(可复制)
门店:… · 到店自取
1. 巨无霸 2. 中薯条 3. 可乐中杯
合计:¥36.50
以上只是记录你的选择;没有下单、没有支付。
理由必须是可核对的事实(省了多少钱 / 价格最低 / 钠最低),不是说服文案。想看别的,才点「我想比较」展开全部候选与「为什么不是它」。
几个工程取舍
- 金额只用整数分:
calculate-price返回什么就是什么,不做浮点运算;展示价只作参考,且必须带上它的条件。 - 约束先于排序:先筛「完整一餐 + 口味 + 糖/冰 + 预算 + 营养上限」,再在可行集里做非支配比较,输出「为什么不是它」。
- 未知不当 0:营养数据缺失就显示未知,不让「缺数据」变成「0 mg 钠」骗过排序。
- 只读白名单:领券、下单、兑换、地址写入、抽奖都不在白名单;实时查询失败就停,不拿历史快照冒充实时价。
- 人数是一等输入:1 人 / 2 人时,份数完备性(主食与饮料各 ≥ 人数)和人均价都跟着变。
边界
- 不代下单、不支付,没有购物车;
- 只比较本轮候选,不保证全菜单最低价;
- 营养条件由你自己设,不构成健康建议;
- 网页版是免 Token 的历史快照体验,实时价格要在 WorkBuddy 或本地 CLI 里查。
体验与代码
- 免登录体验:polaris-smart.github.io/mcd-agent-g…
- 仓库(Python 零依赖 + WorkBuddy Skill):github.com/polaris-sma…
本作品为 M-CODE 2026 参赛作品,非麦当劳官方产品。所有金额来自麦当劳官方 MCP 的
calculate-price,示例为历史核价快照,实际购买请以当次核价为准。如果它帮你把一顿饭的钱算清楚了,欢迎点个 star。