菜单写 ¥32,结账 ¥58.50:我用官方 MCP 把「菜单价」换成了「真正要付的钱」

0 阅读3分钟

起因:菜单价和结账价不是一回事

我常点巨无霸套餐。菜单上写 ¥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
  以上只是记录你的选择;没有下单、没有支付。

理由必须是可核对的事实(省了多少钱 / 价格最低 / 钠最低),不是说服文案。想看别的,才点「我想比较」展开全部候选与「为什么不是它」。

几个工程取舍

  1. 金额只用整数分:calculate-price 返回什么就是什么,不做浮点运算;展示价只作参考,且必须带上它的条件。
  2. 约束先于排序:先筛「完整一餐 + 口味 + 糖/冰 + 预算 + 营养上限」,再在可行集里做非支配比较,输出「为什么不是它」。
  3. 未知不当 0:营养数据缺失就显示未知,不让「缺数据」变成「0 mg 钠」骗过排序。
  4. 只读白名单:领券、下单、兑换、地址写入、抽奖都不在白名单;实时查询失败就停,不拿历史快照冒充实时价。
  5. 人数是一等输入:1 人 / 2 人时,份数完备性(主食与饮料各 ≥ 人数)和人均价都跟着变。

边界

  • 不代下单、不支付,没有购物车;
  • 只比较本轮候选,不保证全菜单最低价;
  • 营养条件由你自己设,不构成健康建议;
  • 网页版是免 Token 的历史快照体验,实时价格要在 WorkBuddy 或本地 CLI 里查。

体验与代码

本作品为 M-CODE 2026 参赛作品,非麦当劳官方产品。所有金额来自麦当劳官方 MCP 的 calculate-price,示例为历史核价快照,实际购买请以当次核价为准。如果它帮你把一顿饭的钱算清楚了,欢迎点个 star。