Skip to content
Conduit

mcp server

mcd-afterparty

麦麦散场局 AfterM|大型活动散场后,多人怎么吃麦当劳:堂食与外卖两套账都算清,真价真路线,只读不代下单

boyuea96-creator/mcd-afterpartycommunitylistedunreviewed

Set up

Runs on your computer. Pick your agent and operating system.

This project does not publish an install method we can turn into a config. Follow the README instead.

README

synced Oct 21, 2026

麦麦散场局 · AfterM

演唱会散场的那个点,商场在关门、地铁在排队、每个人的手机都没电了。 三分钟后有人说"要不去吃麦当劳"——然后所有人一起愣住:吃哪家?吃什么?还开吗?走还是打车?六个人怎么点最便宜?

AfterM 就是回答这一个问题的。 填五个空,出一套真价、真路线、能照着点的方案。

它不替你做决定——堂食和外卖两套账都算清楚,摆出来,你来定。

▶ 点这里在线看 —— 不用注册、不用 Token,手机也能开


三个真实案例

上面那个演示页里是三份真实运行的录像,不是我 P 出来的截图:真门店、真价格、真耗时,用真实账号跑完后原样回放。

场景条件跑出来
A演唱会散场,还没定杭州大莲花 · 周六 21:15 · 3 人堂食 ¥41.70(人均 13.90)/ 外卖 ¥65.40(人均 21.80),总价差 ¥23.70(人均差 ¥7.90)
B点名要吃麦辣鸡翅武汉江汉路 · 周五 22:30 · 4 人有麦辣鸡翅,步行 2 分钟就到,¥114,人均 ¥28.50
C6 人外卖,人均 30上海陆家嘴 · 周四 17:00 · 6 人一步不用走,送到酒店,¥176.70,人均 ¥29.45(预算内)

演示页只认这三组条件,改一个字都会明确拒绝——不会拿别的结果糊弄你。想算自己的地址和时间,往下看。


它到底解决什么

散场之后真正难的不是"想吃什么",是在一堆硬约束里找一个说得通的做法:

  • 店还开着吗——最靠近场馆那家可能 22:00 就关了,或者干脆在商场 B1 已经进不去
  • 走过去要多久——散场人流量下"步行 5 分钟"和地图上画的 5 分钟不是一回事
  • 外卖到底贵多少——不是贵在运费,是外卖没有低价入口
  • 六个人怎么点——3 份双人餐还是 6 份单人餐,价差可能有几十块
  • 说了想吃鸡翅,就别给我一个没有鸡翅的方案

AfterM 把这些一次性算完,然后只给结论:一句话说清这顿怎么吃、花多少、下一步做什么。

它不做什么

写清楚边界,比堆功能有用:

  • 不是导航助手。 交通只是"怎么去吃"的辅助,四种方式全给你,走不走自己定,我不打"不推荐"
  • 不是分析报告生成器。 后台试价几十次,前台只留结论。删掉一句解释你还照着做,那句就删掉了
  • 不替你做决定。 两套账永远都算,价差小于 ¥5/人 会直接说"差不多"
  • 不下单、不领券、不建地址。 全程只读,写入类工具一个都没接。最后给你一张现场行动卡,自己点
  • 不猜关系。 不填关系就按"各吃各的"算,不做人群画像,不写"女生爱甜"这种话

快速开始(本地跑真实计算)

只需要 一个麦当劳 MCP Token。高德 Key 可选——没有就跳过交通那一段,价格照算。

1. 拿 Token

去 https://open.mcd.cn/mcp 手机号登录,控制台激活领取,免费。

2. 起服务

git clone https://github.com/boyuea96-creator/mcd-afterparty.git
cd mcd-afterparty/app
python3 server.py            # 或者双击「启动.command」/「启动.bat」

打开 http://127.0.0.1:8765。

不需要 pip install 任何东西——纯 Python 标准库,macOS 自带 Python 3 直接能跑。

3. 配 Token

两种都行:

# 方式一:环境变量
export MCD_MCP_TOKEN=你的token

# 方式二:写进配置文件(推荐,只在本机)
mkdir -p ~/.workbuddy
# 把 mcp-config.example.json 里的 ${MCD_MCP_TOKEN} 换成真 token,存成 ~/.workbuddy/mcp.json

高德 Key 同理,export AMAP_KEY=你的key 或放进 ~/.zcode/amap.key。

Token 只在内存里用:不写文件、不进日志、不进接口返回。仓库里也只有一个占位符。

4. 用

第一屏填五个空(当前地址 / 落脚点 / 散场时间 / 人数 / 怎么吃),其余四项爱填不填。

散场时间写全日期和时间,周几系统自己算。


一次真实运行的输出(原样摘录)

场景 B:武汉江汉路 22:30 散场,4 人,堂食,想喝麦辣鸡翅,有人不吃冰的。

有麦辣鸡翅,步行 2 分钟就到。

  现做 · 到嘴还是烫的      4 人 · 人均 ¥28.50      交通 免费

  麦辣鸡翅 ×4 + 牛肉堡单品精选 ×4      ¥114     要的那口 + 一份配的,吃得饱
  麦辣鸡翅 ×4                            ¥58     只要这口,不加别的
  精选超值随心配 ×4                    ¥55.60    各点各的单份,最便宜的入口

注意三件事:

  1. 用户点名要的东西排在第一位,不是塞进一句话里。填了偏好而方案里没有,等于没做
  2. 冰品会被打问号。能给"冰的送到会化",就不会承诺"到手还没化"——"能选"不等于"能吃到"
  3. "就点你要的"比套餐便宜一半,但它吃不饱,所以标了"只要这口,不加别的",让用户自己权衡

它怎么算的

① 找门店    高德 POI 解析三处地址 → 按真实步行耗时排队 → 逐个验菜单、
            验营业时段、验能不能点餐。最近的店不一定点得出餐,会自动降级到下一家
② 排交通    步行 / 骑行 / 公交地铁 / 打车 四种全算,只报「总时长 + 全队花费」
③ 试价      把套餐 / 单品 / 随心配 / 券组合全部丢给 calculate-price 真试一遍,
            取最低价。不拿划线价冒充省额——划线价是原价,不是你能省的钱
④ 说人话    一句话结论 + 三个事实标签 + 三档买法 + 一张 ≤6 行行动卡

一次完整计算:麦当劳 MCP 约 36 次调用,高德约 22 次,全并发跑完 7–10 秒。

目录结构

mcd-afterparty/
├── index.html              # 在线演示页(零 key,三份真实快照回放)
├── skill/                  # 参赛主体:给 AI Agent 用的 Skill
│   ├── SKILL.md            #   完整玩法:输入规范、分流规则、输出骨架、着重点判定
│   └── references/
│       ├── verified-facts.md   #   实测事实库:工具、字段、价格口径、踩过的坑
│       ├── map-integration.md  #   高德层用法与 key 纪律
│       └── v2-iteration-notes.md
├── app/                    # 本机可跑版:同样的决策逻辑,带界面
│   ├── mcpc.py             #   麦当劳 MCP + 高德 客户端(标准库实现)
│   ├── engine.py           #   决策引擎:找店、排交通、试价、生成文案
│   ├── server.py           #   零依赖 HTTP 服务
│   └── index.html          #   两屏界面
├── tools/                  # 快照抓取与演示页构建
└── demo/snap/              # 三份真实运行结果(JSON 原始数据)

改了之后怎么发

skill/ 是发布副本,日常编辑的是开发环境里的工作副本,两份不会自动同步。改完跑两条:

python3 tools/sync_skill.py     # 工作副本 → skill/(顺带把个人住址门牌脱敏)
python3 tools/build_demo.py     # 若换了快照,重建根目录 index.html
git add -A && git commit -m "..." && git push

仓库里装了 pre-commit 钩子,只改了一边就提交会被拦下并提示。tools/sync_skill.py --check 可单独自查。

数据来源与口径

什么从哪来口径
套餐、价格、券、门店、营业时间麦当劳 MCP(唯一权威)calculate-price 真实试价,单位是分
距离、耗时、打车费、公交票价高德地图打车取 route.taxi_cost,公交取 transit.cost
外卖预计送达无接口按常识判断,不当数据用
到手温度无接口按商品品类 + 配送时长推断,一律打问号

价格一律标明口径:含不含打包费、含不含运费、是人均还是全队。打包费按件收(¥0.1/件,封顶 ¥3),运费 ¥6。


已知限制

写在明面上,省得你自己试出来:

  • 外卖只认麦当劳 App 里存过的地址,手打的不算。delivery-create-address 是写入工具,本方案禁用,所以没有的地址会直接告诉你"先去 App 加一个"
  • 门店营业时间以接口返回为准,临时闭店、商场闭馆这类情况接口看不到
  • 演示页只内置三组条件,因为它没有 Token,算不了你的地址。要算自己的,本地跑
  • 券有三种状态:可领未领(不能试价,只能说"去领")、已领(还要过门店)、门店可用(唯一能试价)。所以"哪里有券"和"这单能用券"是两件事
  • 现阶段只验证单个已存地址,任意地址搜索是下一阶段

关于这个项目

这是一个非官方项目,由个人独立开发,与麦当劳(中国)有限公司无隶属关系,不是麦当劳官方产品。

餐品信息、价格及供应状态以麦当劳官方渠道的实时结果为准;项目输出仅供参考,不构成医疗、营养或其他专业建议。

本项目参加 麦当劳程序员节创意开发大赛,赛事信息见 https://github.com/M-China/mcd-developer-innovation-challenge。

License

MIT

↑↓ navigate openesc close