内容
# 麦门一人食补给站 (mcd-solo-meal)
给**独居 / 一个人生活**的人(独居青年、异地工作党、自由职业、一人公司都算)的「今天一个人吃什么」决策 + 治愈陪伴 Skill。
不是省钱计算器,也不是冷冰冰的营养表——而是:在你只想随便对付一口、或想好好犒劳自己时,用真实的麦当劳营养数据帮你选一份当下合适、又尽量均衡的饭,并且像搭子一样**记得你**。
> 一句话:**别人在帮你算怎么吃最省,我们在帮你记住:一个人,也值得认真吃一顿。**
---
## 为什么做(真实刚需,不是比赛噱头)
- **探店内容加速器被砍**:没人会天天发麦当劳探店,需求前提为假。
- **一人食站得住**:独居 / 自由职业者**每天**都要面对"一个人今天吃什么、怎么买、在哪买",是高频真刚需。作者本人就是目标用户。
- **同类人都会用**:目标人群规模大且高度同质——"一个人住、不想凑合也不想费脑"是共性痛点,语气对、记得住,就会被反复打开。
---
## 核心功能
| 模块 | 说明 |
|---|---|
| **状态双模式** | 极速单(累/赶稿/没空→快+省+经典)vs 犒劳单(想对自己好→满足感+可坐食+小确幸) |
| **周中不重样周菜单** | 基于记忆层本周已点去重,生成 7 天不重样方案,治一个人"每天吃一样"的决策疲劳(区别于 #4 只做早餐) |
| **一个人的节日不空桌** | 检测节日/生日,给"像样"套餐 + 不煽情陪伴文案 |
| **记忆层** | 本地存忌口/口味/常点,每次开口像老搭子 |
| **营养辅助** | 用 `list-nutrition-foods` 真实数据,给关键数字一句话提示,帮一个人吃得更均衡(**辅助决策,非卖点**) |
---
## 目标用户
所有「一个人生活」的人:独居青年、异地工作党、自由职业者、一人公司创业者……核心是"一个人住、不想凑合也不想费脑"。
---
## 快速开始
本 skill 以 **WorkBuddy Skill** 形式运行(SKILL.md 为指令入口),并由 `src/` 下的 Python 模块提供可测试的纯逻辑实现。
### 方式一:在 WorkBuddy 中触发
把本仓库内容放入 `~/.workbuddy/skills/mcd-solo-meal/`,对话中说:
> 「今天一个人吃啥」「帮我点一份一个人的饭」「想犒劳自己」「赶稿到深夜吃点什么」
Skill 会按 `now-time-info → query-nearby-stores → query-meals → list-nutrition-foods → calculate-price → 推荐+文案 → 确认后 create-order` 闭环执行。
### 方式二:本地运行逻辑 / 跑测试
```bash
cd mcd-solo-meal
PYTHONPATH=src python src/demo.py "今天周末想犒劳自己慢慢吃" # 端到端演示(mock 餐品)
PYTHONPATH=src python -m unittest discover tests # 19 个单元测试
```
> 说明:`demo.py` 与单元测试使用内置 mock 餐品数据,无需联网即可验证三模块逻辑。接入真实麦当劳 MCP 后,餐品/营养数据由 MCP 工具实时返回。
---
## 目录结构
```
mcd-solo-meal/
├── CONTEST_DECLARATION.md # 官方参赛声明(一字未改,文件名不可改)
├── README.md # 本文件(文件名不可改)
├── MCP_INTEGRATION.md # MCP 集成说明(文件名不可改)
├── SKILL.md # Skill 指令入口(AI 运行时读取)
├── workbuddy.md # 参加 WorkBuddy 专项奖励需提交的对话上下文
├── src/
│ ├── memory_store.py # 记忆层:user_profile.json 读写、忌口/口味/本周去重
│ ├── recommend.py # 状态双模式 + 推荐 + 营养筛选
│ ├── weekly_plan.py # 周中不重样周菜单
│ ├── festival.py # 一个人的节日不空桌
│ └── demo.py # 端到端演示(mock 数据)
└── tests/ # 单元测试(memory_store / recommend+weekly+festival)
```
---
## 合规与边界
- 技能输出仅供参考,**不构成医疗、营养或其他专业建议**;餐品营养数据以麦当劳官方实时结果为准。
- 营养信息仅作辅助决策,不堆砌全表、不宣称任何餐品能治病或改善健康。
- 绝不自动下单:`create-order` 必须等用户明确说「下单/确认」才调用。
- 记忆层最小化:只存口味/忌口/常点,不存任何身份信息或支付数据。
---
## 报名文件清单
| 文件 | 要求 | 状态 |
|---|---|---|
| README.md | 必须,文件名不可改 | ✅ 本文件 |
| CONTEST_DECLARATION.md | 必须,文件名及内容均不可改 | ✅ 已放入官方原文 |
| MCP_INTEGRATION.md | 必须,文件名不可改 | ✅ 见同目录 |
| 源代码 | 必须,形式不限 | ✅ src/ 全套 + tests/ |
| workbuddy.md | 参加 WorkBuddy 专项奖励必须提交 | ✅ 已提交开发对话上下文 |