别的工具告诉你「该点什么」。麦途做的是相反的事——读懂你已经点的。
在线预览 → https://calmsprite2001.github.io/mcd-mailu/
不用装任何东西、不用申请 Token,打开就是一张由 88 单样本生成的足迹卡。
基于麦当劳官方 MCP 的消费轨迹与场景叙事 Skill。读取你的历史订单,识别出「这次在机场」「这次是赶早班」「这次在机场连点了两单」,把你的麦当劳历史讲成一个每句话都能回溯到真实订单的故事,输出一张可截图分享的轨迹卡。
麦当劳程序员创意开发大赛参赛作品。
| 用户 | 场景 |
|---|---|
| 麦当劳常客 | 想知道一年到底吃了多少次、钱花在哪、最常点哪几样 |
| 一年只吃几次的人 | 这类人反而更有故事——次数少,每一次都有原因(机场、赶早、加班) |
| 出差与通勤人群 | 在陌生城市把麦当劳当锚点的人,门店名就是他们的行程记录 |
| 愿意分享的人 | 卡片是单文件、可截图、带结论,不需要解释就能发出去 |
| 开发者 | 想找一个「MCP 不只用来查数据、还能用来理解生活」的参考实现 |
不适合谁:想用它点餐、领券、比价的人。麦途只读历史,不干预任何下单动作。
大赛里绝大多数作品在解决「帮你点」:点餐助手、省钱助手、营养助手、派对策划。这些方向都很好,但已经挤满了。
麦途补的是另一端,也是被所有人忽略的一端:已经发生的消费里有什么。
麦当劳订单里最被低估的两个字段是门店名和下单时间:
- 店名里藏着「机场」「火车站」「写字楼」「医院」——你当时在哪
- 时间里藏着早班机、深夜加班、周末遛娃——你为什么在那
把这些线索拼起来,一笔笔冷冰冰的订单就变成了能讲的故事。这是 MCP 数据用法的另一种可能:不是查询接口,是理解生活的原料。
不开 Token、不连网络,直接打开 docs/index.html 就能看到完整效果。它由 fixtures/demo_orders.json 里 88 单人工构造的样本生成。
同一套代码,两种讲述方式:
样本少时讲轨迹(真实测试账号,4 单,11 个月):
11 个月里你吃了 4 次麦当劳——2 次都在路上。
2025-11-15 17:23,麦当劳成都天府机场GTC餐厅,¥38:板烧鸡腿堡三件套(出行慰藉、新店打卡) 2025-11-15 17:35,同一家店,¥9.5:黑金奶黄年糕风味派(出行慰藉、一单多点) 最拼的一次:2025-11-15,距上一单 12 分钟、同店,连吃两单。
样本够时讲画像(88 单):
6 个月,88 次,你是天涯路人。
88 单,共 ¥1793.8,平均每单 ¥20.4。 26/88 单在机场或火车站——这些地方从不是你的目的地。 点得最多的三样:中薯条×31、中可乐×18、香芋派×11。
卡片上的每一句话,都必须能回溯到至少一条真实订单。
这是产品的命根子。所以:
- 数据里没有的餐品,文案里一个字都不出现(比如知道你没点过可乐,就不会说「配一杯可乐」)
- 每个数字都带
evidence(订单号集合),校验不过就不写 - 样本不足 10 单时不装统计,改成按时间讲每一次,宁可朴素也不虚构
git clone https://github.com/calmsprite2001/mcd-mailu.git
cd mcd-mailu
python scripts/run.py --demo
# 直接用浏览器打开 docs/index.html零依赖,纯标准库,Python 3.10+。
- 到 https://open.mcd.cn/mcp 用手机号登录,控制台激活并复制 MCP Token
- 设环境变量:
export MCD_MCP_TOKEN=你的Token- 在 WorkBuddy / Cherry Studio / Cursor 中配置 MCP 连接器(配置见
mcp-config.example.json) - 直接跑:
python scripts/run.py或者在 WorkBuddy 里说一句「看看我的麦当劳足迹」,Skill 会自动接管。
order-list ──┐
mall-order-list ──┼─→ 清洗归一 ─→ 场景识别 ─→ 模式识别 ─→ 叙事生成 ─→ HTML 轨迹卡
now-time-info ──┘ (状态/去重/ (每单打标签 (按到访口径) (每句带 evidence)
金额/时间) 带 evidence)
关键设计:按「到访」而不是「按订单」统计。 在机场候机 12 分钟连点两单,是「1 次到访、2 个订单」,不是「去了两次机场」。不做这层合并,画像会被连点污染——这个坑是实测时发现的。
所有识别规则都在 references/scene_rules.md,透明可查。欢迎 PR 补充新场景。
词典越厚,能认出的故事越多。这是本项目的护城河:不是模型多强,是场景库多细。
- 订单明细不落盘,全部内存计算,输出只有聚合结果与场景标签
- 卡片里不出现完整订单号、手机号、地址(门店名保留,它是故事的一部分)
- Token 只从环境变量读,不打印、不进文件、不进日志
fixtures/全部是人工构造的假数据
order-list没有分页参数,一次返回全量。重度用户的历史是否会被服务端截断,未能验证。- 订单明细没有单品单价,只有订单总额,所以无法计算单品花费,只能统计出现频次。
- 城市识别未实现。跨城判断目前靠店名关键词(机场/车站)间接推断。
SKILL.md Skill 定义与工作流判据
scripts/
mcp_client.py 麦当劳 MCP 客户端(仅标准库)
probe.py 字段探测器(实测校准用)
money.py 金额/时间归一化
adapters.py MCP 返回 → OrderRecord
scene_engine.py 场景标签与模式识别
narrative.py 叙事生成(带 evidence)
card_render.py HTML 轨迹卡
run.py 主流程(支持 --demo)
gen_fixture.py 演示数据生成器
fixtures/demo_orders.json 88 单人工构造样本
references/scene_rules.md 场景识别词典(欢迎补充)
docs/index.html 离线演示页
本项目为麦当劳程序员节创意开发大赛参赛作品,由参赛者独立开发,非麦当劳官方产品。输出仅供参考,不构成消费建议;餐品信息、价格及供应状态以麦当劳官方渠道实时结果为准。