内容
# 麦门省钱体检 · mcd-saver-checkup
<p align="center">
<a href="https://ima.qq.com/skill?shareId=9e1fecab05fd48e299b7df116d884c0a"><b>▶ 在线体验(ima Skill)</b></a>
·
<a href="https://github.com/lklbar666/mcd-saver-checkup">源码</a>
</p>
> 不看你想吃什么,先看你**已经亏在哪**。
基于麦当劳中国 MCP 的省钱审计 Skill。同类项目都在回答「怎么点最省」,它回答**「你这一单多花了多少、亏在哪一步、下次怎么不再亏」**——每个数字都来自 `calculate-price`,可当场复算。
<p align="center">
<img src="./assets/share-card.png" width="420" alt="真实案例:单点 45.5 元,四件套 28 元,省 17.5 元">
</p>
## 它和别的省钱助手有什么不同
| | 常见的省钱助手 | 麦门省钱体检 |
|---|---|---|
| 输入 | 预算 / 口味 / 人数 | **你实际的点法**(或历史订单) |
| 输出 | 一份推荐方案 | 多方案对比 + **差额** + **归因** |
| 可信度 | 「我觉得这样更省」 | 每个数字可被 `calculate-price` 复算 |
| 记忆点 | 帮我配一份 | **「我这个月在麦当劳多花了 43 元」** |
| 依赖用户数据 | 不需要(谁都能抄) | 需要,所以报告是独一无二的 |
## 三个功能
### ① 差价凭证(核心)
输入你常点的一单,输出「同样这些东西的四种买法」。
**真实案例**(2026-10-21 11:40,北京建外 SOHO 店,MCP 实时拉取):
```
你点的是:麦辣鸡腿汉堡 22.5 + 薯条 13.5 + 可乐 9.5
按单点算:45.5 元
| 买法 | 实付 | 比原样省 | 备注 |
|---|---:|---:|---|
| 人气超值四件套随心选 | 28 | 17.5 | 多得 麦乐鸡 |
| 麦辣鸡腿汉堡三件套 | 33.5 | 12 | |
| 单点 + 11.9元麦辣鸡腿堡券 | 34.9 | 10.6 | |
| 单点 | 45.5 | 0 | |
最优:人气超值四件套随心选,实付 28 元,省 17.5 元,还多一份麦乐鸡。
```
**注意这个反常识**:你手上就算领了「11.9 元麦辣鸡腿堡」券(省 10.6 元),
也**不如**直接买 28 元的四件套——因为券只能作用于单点,而四件套本身已经含了这个汉堡。
这正是本项目要解决的问题:**单看一张券算不出最优,得把套餐结构一起算进来。**
### ② 凑单亏损检测(招牌)
**为了满减多买,到底省不省?** 这是最容易被忽略的坑:
```
凑单体检(从最优方案出发)
- 满 45 减 6:差 10.5,最少要加购 圆筒冰淇淋(6) + 苹果派(8) 花 14,
只减 6 → 不划算,净亏 8
- 满 60 减 12:差 25.5,最少加购 33,只减 12 → 不划算,净亏 21
```
一句话结论:**你为了省 6 元,要多花 14 元。**
### ③ 习惯审计(有历史订单时)
读 `order-list` 的近 N 单,逐单重算「当时本可以怎么买」,汇总出:
- 多少单本可以更便宜
- 一共多花了多少
- 主要亏在哪个动作:没用券 / 套餐选错 / 凑单过度 / 单点比套餐贵
## 在线体验
不想装环境?直接在 ima 里试:
**▶ [麦当劳省钱体检助手](https://ima.qq.com/skill?shareId=9e1fecab05fd48e299b7df116d884c0a)**
这是本仓库打包成的 ima Skill,内置同一套差价引擎。可以这样问:
```
帮我体检一下:我平时点麦辣鸡腿汉堡 + 薯条 + 可乐
```
```
满 60 减 12,我想吃麦乐鸡 10 块,值得凑吗?
```
> 在线版与命令行版共用同一套逻辑;命令行版可换门店、换时段、批量跑,适合核对与复现。
## 安装
1. 申请麦当劳 MCP Token:<https://open.mcd.cn/mcp> → 登录 → 控制台 → 激活 → 复制
2. 在 WorkBuddy 中:左侧【专家·技能·连接器】→【连接器】→ 右上【自定义连接器】→【配置 MCP】,填入:
```json
{
"mcpServers": {
"mcd-mcp": {
"type": "streamablehttp",
"url": "https://mcp.mcd.cn",
"headers": { "Authorization": "Bearer YOUR_MCP_TOKEN" }
}
}
}
```
3. 回到【自定义连接器】把 `mcd-mcp` 启用。
## 使用
```
帮我体检一下:我平时点巨无霸 + 中薯条 + 中可乐
```
```
看看我最近 10 单,有没有买贵
```
```
我想吃麦乐鸡 10 块,现在有满 60 减 12,值得凑吗?
```
**命令行(离线演示,不需要 Token)**:
```bash
python scripts/audit.py --demo
python scripts/audit.py --basket "巨无霸,中薯条,可口可乐"
python scripts/audit.py --list
```
## 工作原理
1. 从 MCP 取菜单、套餐组成、可用券、当前满减(`query-meals` / `query-meal-detail` / `query-store-coupons` / `available-coupons`)
2. **枚举**所有可行买法:单点 / 任意套餐组合 + 补单点
3. 先判定满减,再判定券;**默认满减与券二选一**(除非数据标明可叠加)——宁可保守,不给出违规方案
4. 每笔价格用 `calculate-price` 复算,报出差额与归因
5. 对每个满减门槛做「加购临界」计算:加购金额 < 优惠金额才划算
**为什么可信**:引擎不自己编价格,只做枚举与比价;所有金额来自官方接口,用户可逐笔核对。
## 目录
```
SKILL.md WorkBuddy Skill 入口
scripts/audit.py 差价引擎(纯标准库,可离线跑)
scripts/load_menu.py 把 MCP 实时菜单/套餐/可领券转成引擎格式
scripts/mcd_mcp.py MCP 客户端(JSON-RPC over streamable HTTP)
data/mock_menu.json 离线演示数据(假数据,非真实价目)
data/menu-1950564.json 某门店的真实快照(2026-10-21,会过期)
(在线版) https://ima.qq.com/skill?shareId=9e1fecab05fd48e299b7df116d884c0a
examples/ 用法示例
MCP_INTEGRATION.md 用到的 MCP 工具、调用链与业务价值
CONTEST_DECLARATION.md 参赛声明(官方原文,未改动)
```
## 目标用户
- 每周吃 2 次以上麦当劳、习惯固定点法的人
- 公司团餐/拼单的发起人
- 被「满减」劝着多买过一次、事后后悔的人
## 限制
- 价格、库存、券的可领状态**以麦当劳官方渠道实时结果为准**;本项目只做比价,不承诺长期价格。
- `data/mock_menu.json` 是**演示用假数据**,不是真实价目。
- 满减与券的叠加规则因活动而异,默认按「不可叠加」保守计算;如官方允许叠加,在数据里把 `stackable` 置为 `true`。
- 本项目为参赛作品,非麦当劳官方产品。
## 许可
MIT。参赛声明见 [CONTEST_DECLARATION.md](./CONTEST_DECLARATION.md)。