你和朋友是「灵魂麦搭子」还是「反差萌组合」? 读一读你最近的麦当劳订单,生成一张专属麦门人格卡;再把饭搭子码发给朋友,随时测测你们是不是天生的麦搭子。
以上示例均由仓库自带的虚构数据生成
这是一个基于 麦当劳中国 MCP 开发的 Agent Skill,可以装进 Claude Code、WorkBuddy 等 Agent 使用,也可以直接在命令行运行。它综合 8 个只读 MCP 接口的数据(订单、订单详情、积分、奖品、券包、积分商城、营养成分、服务器时间),给你画一张麦门画像:
- 饭搭子匹配:把约 30 个字符的饭搭子码发给朋友,随时算出你们的匹配度、搭子类型(灵魂麦搭子 / 默契饭友 / 互补拍档 / 反差萌组合)、异同点,以及「下次一起点什么」。分享码只包含统计结果,不含任何订单、门店或金额。
- 四维主人格:从「早餐派/正餐派」「外送派/到店派」「专一派/尝鲜派」「精打细算/随性派」四个维度,把你归入 16 种麦门人格之一。
- 麦门角色:18 种角色标签,例如节气收集家、早八元气派、券包管理大师、分享担当、堂食仪式感、无糖主义、一人食达人,挑出你最有特点的 3 个,每个都附带依据。
- 积分段位:按累计积分分为萌新、常客、资深、元老、传奇,并显示距离下一段位还差多少分。
- 我的麦当劳时间:最常出没的星期和时段、时段分布、工作日和周末的比例、平均每月几单。
- 场景与口味:堂食、外带、外送、得来速的分布,品类偏好,本命单品和饮品,平均每单热量和蛋白质,用券比例。
- 权益提醒:提示本月即将过期的积分和今天到期的券。
不管你最近点了 10 单还是一单没点,都能生成合适的卡片:订单少时会标注置信度,0 单时生成"待解锁"卡。
项目特点:全程只读,不会下单、领券、抽奖或扣积分;零依赖,只需要 Python 3.9;本地运行,没有服务器;规则透明,每个结论都能追溯到数据;自带演示数据,没有 Token 也能体验。
- 常点麦当劳、想看看自己"麦门画像"的朋友
- 想找饭搭子、和同事朋友比一比口味的人
- 想参考如何基于 MCP 做一个完整 Skill 的开发者:MCP 客户端只有约 150 行标准库代码,人格计算全部是确定性规则,每个结论都能追溯到数据
整个仓库就是一个 Skill:根目录的 SKILL.md 是入口,scripts/ 是代码,assets/ 是数据。把仓库放进 Agent 的技能目录就能用。
git clone https://github.com/Young625/mcd-persona-card.git ~/.claude/skills/mcd-persona-card重开一个 Claude Code 会话即可使用。
clone 到该工具的技能目录,通用位置是 ~/.agents/skills/:
git clone https://github.com/Young625/mcd-persona-card.git ~/.agents/skills/mcd-persona-card- 下载仓库并打包:
git clone https://github.com/Young625/mcd-persona-card.git zip -r mcd-persona-card.zip mcd-persona-card -x '*/.git/*' '*/__pycache__/*'
- 在 WorkBuddy 左侧打开【专家·技能·连接器】→【技能】→【添加技能】→【上传技能】,选择上一步生成的
mcd-persona-card.zip。 - 推荐同时在【连接器】里添加麦当劳 MCP(配置见
mcp-config.example.json),这样 Skill 可以直接通过连接器读取数据,脚本不需要接触你的 Token。
- 在 open.mcd.cn/mcp 用手机号登录,到控制台激活并复制 MCP Token。
- 任选一种方式提供给脚本,不要把 Token 发到 Agent 的对话里:
- 环境变量:
export MCD_MCP_TOKEN=你的Token - 配置文件:写入
~/.mcd-persona-card/.env,内容为MCD_MCP_TOKEN=你的Token
- 环境变量:
- 检查连接:
python3 ~/.claude/skills/mcd-persona-card/scripts/run.py check
如果你的 Agent 已经通过连接器接入了麦当劳 MCP,可以跳过这一步,Skill 会让 Agent 自己取数据。没有 Token 也可以先用演示数据体验。
| 你说 | Skill 会做什么 |
|---|---|
| 生成我的麦门人格卡 | 读取你的订单和积分,生成人格卡和饭搭子码 |
| 先用演示数据看看效果 | 用虚构数据生成一张示例卡片 |
| 我朋友的码是 MC-xxxx,看看我们是不是饭搭子 | 计算匹配度,生成匹配卡 |
在仓库目录下执行(scripts/run.py 也可以用绝对路径从任何目录调用):
# 演示数据,不需要 Token
python3 scripts/run.py card --demo --open
# 生成你自己的人格卡
python3 scripts/run.py card --name 你的昵称 --open
# 和朋友的码匹配(用你上次拉取的数据,不重复请求接口)
python3 scripts/run.py match MC-朋友的码 --friend-name 小林 --cached --open
# 直接比较两个码
python3 scripts/run.py match MC-码A MC-码B --name 小王 --friend-name 小林演示数据的输出示例(节选):
你的麦门人格:早送专省 · 云端早餐家
早餐送到门口,口味始终如一,积分也算得明明白白。
积分段位:资深(累计 2600 分,距元老还差 400 分)
四维画像(基于最近 10 单,2026-06-03 ~ 2026-09-26,置信度 高):
早餐派 ████████░░ 正餐派 → 早餐派
最近 10 单中有 8 单在 10:30 前下单
外送派 █████████░ 到店派 → 外送派
最近 10 单中有 9 单是外送
专一派 ██████████ 尝鲜派 → 专一派
100% 的订单里有回头单品,共吃过 6 种餐品
精打细算 ████████░░ 随性派 → 精打细算
70% 的订单用了券,积分利用率 90%
麦门角色:
1. 券包管理大师:70% 的订单用了券
2. 积分玩家:积分兑换 4 次,抽中 1 个奖品
3. 一人食达人:10/10 单是一人份
我的麦当劳时间:
最常出没:周六 · 早餐时段
时段分布:早餐 80% · 午餐 10% · 晚餐 10%
工作日 50% · 周末 50% · 平均每月约 2.3 单
场景与口味:
取餐方式:堂食 10% · 外送 90%
品类偏好:主食 35% · 小食 23% · 甜品 4% · 饮品 38%
麦门档案:
本命单品:猪柳蛋麦满分(出现在 8 单里)
本命饮品:优品豆浆小杯
平均每单:约 591 千卡,蛋白质约 28 克(按可识别餐品计算,覆盖 100%)
用券订单:70%,用券时平均优惠 29%
节气门票:8/24(立春、雨水、惊蛰、春分、清明、谷雨、立夏、小满)
门店足迹:3 家
提示:券包里有 1 张券今天到期
你的饭搭子码:MC-AVBaZE4jFwQmAAMADbwFAA28BgANvArT
卡片保存在 ~/.mcd-persona-card/out/,用浏览器打开后可以下载 PNG。
| 命令 | 说明 |
|---|---|
card |
生成人格卡 |
match CODE [CODE2] |
饭搭子匹配。传一个码时和你自己的数据比较,传两个码时直接比较;--friend-name 设置对方昵称 |
check |
检查 Token 和 MCP 连接 |
card 和 match 共用的参数:
| 参数 | 作用 |
|---|---|
--demo |
使用演示数据 |
--cached |
使用上次实时拉取的缓存 |
--input FILE |
读取 Agent 通过连接器取到的数据文件 |
--name |
设置你的昵称 |
--out |
指定输出目录 |
--open |
生成后用浏览器打开 |
| 维度 | 判定规则 |
|---|---|
| 早餐派 / 正餐派 | 10:30 前下单的订单占一半以上,就是早餐派 |
| 外送派 / 到店派 | 外送订单占一半以上,就是外送派 |
| 专一派 / 尝鲜派 | 一半以上的订单里出现了"之前也点过"的餐品(不算饮品),就是专一派 |
| 精打细算 / 随性派 | 用券订单占比(权重 60%)和积分利用率(权重 40%)综合超过一半,就是精打细算 |
四个维度组合成 16 种人格:
| 早·送 | 早·店 | 正·送 | 正·店 | |
|---|---|---|---|---|
| 专·省 | 云端早餐家 | 晨光守序者 | 精算外送官 | 本命守护者 |
| 专·随 | 被窝早餐派 | 晨间老主顾 | 宅家本命派 | 老地方老味道 |
| 鲜·省 | 晨间点单策略家 | 晨光探索家 | 外送尝鲜官 | 菜单研究员 |
| 鲜·随 | 早安惊喜派 | 早餐漫游者 | 宅家美食冒险家 | 随心探店家 |
18 种角色的判定规则见 MCP_INTEGRATION.md,例如"≥ 50% 的订单是工作日早餐"就是早八元气派。积分段位按累计积分划分:萌新(0)、常客(300)、资深(1000)、元老(3000)、传奇(8000)。
| 最近订单数 | 置信度 | 卡片 |
|---|---|---|
| 6~10 单 | 高 | 完整卡片 |
| 3~5 单 | 中 | 完整卡片 |
| 1~2 单 | 低 | 标注"初步判定" |
| 0 单 | 待解锁 | "麦门新朋友"卡,展示积分段位、节气门票等 |
几点说明:
- 麦当劳 MCP 的
order-list目前只返回最近 10 单,所以这是一张"近期画像"。 - 数据不足的维度会如实显示"数据不足";营养数据覆盖率低于 60% 时不展示;最常出没的时段并列时如实显示。
- 匹配度的算法:四维相似度占 60%,品类偏好相似度占 30%,有共同本命单品再加 10 分。
完整的数据流程、用到的 Tool 和字段见 MCP_INTEGRATION.md。
- 只调用 8 个查询类 Tool,不调用任何下单、领券、抽奖、兑换类 Tool。
- 所有计算都在你的电脑上完成,没有服务器,不上传任何数据。
- 采集时立即丢弃门店名称和地址、取餐码、支付单号、订单备注和金额,只保留取餐方式、用券张数和优惠比例。
- 卡片、分享码和命令输出里都不包含金额、门店名称、订单号、账户 ID;门店只显示数量,优惠只显示比例。
- Token 只从环境变量或
.env文件读取;缓存和卡片保存在~/.mcd-persona-card/,不会写进仓库或你当前的项目。
mcd-persona-card/
├── SKILL.md Skill 入口:Agent 使用说明
├── README.md 项目介绍(参赛必需)
├── CONTEST_DECLARATION.md 参赛声明(参赛必需)
├── MCP_INTEGRATION.md MCP 接入说明(参赛必需)
├── mcp-config.example.json MCP 配置示例(参赛必需)
├── scripts/
│ ├── run.py 命令行入口
│ └── mcd_persona/
│ ├── mcp_client.py MCP Streamable HTTP 客户端(标准库实现)
│ ├── collect.py 调用只读 Tool、精简数据、本地缓存
│ ├── catalog.py 餐品分类、营养数据解析与匹配
│ ├── features.py 统计指标
│ ├── persona.py 四维人格、麦门角色、积分段位
│ ├── share_code.py 饭搭子码编码和解码(带校验位)
│ ├── match.py 匹配算法
│ ├── render.py SVG 卡片 + 可下载 PNG 的 HTML 页面
│ ├── paths.py 路径管理
│ └── cli.py 命令行参数
├── assets/
│ ├── personas.json 16 种人格文案
│ └── demo.json 虚构的演示数据
└── docs/ README 示例图
本项目参加 麦当劳程序员创意开发大赛,参赛声明见 CONTEST_DECLARATION.md,MCP 接入说明见 MCP_INTEGRATION.md,MCP 配置示例见 mcp-config.example.json。
本项目是参赛者独立开发的粉丝创意作品,非麦当劳官方产品。结果仅供娱乐,不构成营养或其他专业建议;餐品信息、价格及供应状态以麦当劳官方渠道为准。
如果你觉得有意思,欢迎点个 ⭐ Star,也欢迎晒出你的人格卡!

