一起吃,每个人都刚刚好。
为 2–6 位同事或朋友做多人点餐协商:共同预算有限、每个人口味不同,也能得到每人一份、预算可核查、理由说得清的麦当劳点餐草案。
这是麦当劳程序员创意开发大赛的独立参赛作品,非麦当劳官方产品。
需要 Node.js 22 或更新版本,无需安装第三方依赖,无需模型 API Key。
npm start打开 http://127.0.0.1:4173 ,修改成员预算和偏好,点击生成方案。Windows 也可双击 START.cmd 一键启动,保持启动窗口开启,结束时按 Ctrl+C。页面有三种比较策略、复制分餐单、下载 JSON、导入菜单和真实联调样例。页面不会读取 Token。
npm test
npm run demo
node scripts/plan.mjs examples/demo.json --json「随便吃什么」往往意味着组局者反复确认预算、口味和价格。FairBite 把这件事拆为可检查的约束:个人预算与共同预算都满足;不吃条件先过滤;在可行方案中先提高最低偏好匹配分,再提高整桌匹配分,最后降低总价。
演示场景:4 人共同预算 88 元。照顾每个人方案为 84 元,最低匹配 75;总价优先方案为 72 元,最低匹配 50。两者的差异可直接比较。以上餐品和价格均为虚构演示,匹配分是规则分。
2026-10-21 20:53:48(北京时间)开始,使用官方 https://mcp.mcd.cn,查询上海黄浦华旭国际大厦餐厅,完成 12 次业务工具调用:时间、门店、菜单、4 份套餐详情、4 次候选计价和 1 次整单计价。
四人方案候选价合计 128.50 元,官方整单 calculate-price 返回 128.50 元,在示例 150 元预算内。没有创建订单、领券、支付或扣积分。
脱敏调用记录见 docs/LIVE_EVIDENCE.json。这是带时间的历史快照,当前价格和可售状态必须重新查询;此测试没有验证过敏信息、配送、优惠券或所有门店。
将整个仓库作为 mcd-fairbite 文件夹导入支持 SKILL.md 的 Agent 客户端;根目录的 SKILL.md 为入口,保留 src/、scripts/、references/。在宿主客户端连接官方麦当劳 MCP,并使用该客户端支持的环境变量配置方式设置 MCD_MCP_TOKEN。不要把真实 Token 放在仓库或聊天记录中。
示例提示词:
使用 mcd-fairbite。我们 4 人到店自取,共同预算 150 元,每人最多 40 元。甲喜欢牛肉,乙和丁喜欢鸡肉,丙喜欢鱼。地点是上海人民广场,先给出门店选择,再生成照顾每个人的方案并复核整单价格。
配置和完整流程见 MCP_INTEGRATION.md。本项目提供官方 MCP 只读客户端,语义对话由宿主 Agent 执行。
在已设置 MCD_MCP_TOKEN 的终端运行:
node scripts/mcp.mjs discover
node scripts/live-demo.mjs 上海市 人民广场 private/live脚本使用明确的演示地标、首家营业门店、四份已知套餐名称、4 名虚构搭子和 150 元预算。它是可复现的只读联调脚本,实际用餐由 Skill 引导用户选店。菜单发生变化、默认选配缺失或计价失败时会停止,不生成成功证据。输出目录含查询结果,请脱敏后再公开。
| 文件 | 用途 |
|---|---|
| SKILL.md | Agent 技能入口 |
| src/planner.mjs | 共享的整数分预算规划器 |
| src/mcp.mjs / src/menu.mjs | 官方 MCP 传输、套餐与报价适配 |
| index.html / web/ | 浏览器交互演示 |
| scripts/ | 本地预览、规划、工具发现、真实联调 |
| examples/ | 虚构演示与带时间的实测快照 |
| tests/ | 预算、公平策略、MCP 传输与计价错误处理测试 |
| docs/SUBMISSION.md | 报名文案及发布步骤 |
| docs/DEMO_SCRIPT.md | 三分钟演示讲稿 |
| docs/VERIFICATION.md | 测试结果、浏览器验证和交付状态 |
每人一份完整餐,2–6 人,候选 1–12 份,预算最多 2000 元。有限候选集内精确搜索,不宣称全菜单全局最低价。共享拼盘、库存限量、费用分摊和优惠券组合不由本地算法求解。导入菜单不等于已验证数据;整单报价必须重新核查预算。
不吃标签只用于口味筛选。涉及过敏、宗教或医学要求须向官方核实。完整成分未知且存在排除条件时,规划器会拒绝该候选。输出是草案,实时价格与供应以麦当劳官方渠道为准。
项目源码以 MIT 许可证提供。官方声明、服务、商标及官方返回数据的权利不因本项目开源而改变,详见 THIRD_PARTY_NOTICES.md。
