Star 历史趋势
数据来源: GitHub API · 生成自 Stargazers.cn
README.md

McOracle · 麦门神谕

不要问 AI,问薯条。

McOracle 是一个纯 Skill 形态的 AI 神谕体验:向它提出任何问题,它会从 104 条原创神谕中真随机抽取一条答案,包装成一份「麦门启示录」,再通过麦当劳中国官方 MCP 查询真实门店、可售菜单与价格,推荐「今日必点」,并生成一张酒红金色的神秘命运卡。用户明确确认后,可继续进入订单流程。

命运卡示例

示例卡:神谕 NO.021「别在深夜做决定。」· 今日必点 板烧鸡腿堡三件套 · ¥34.50(经 MCP 实时核实)· 1200×1600 PNG

命运可以随机,价格必须真实。

  • 神谕从原创库真随机抽取,不由模型即兴编造;
  • 商品、价格、门店全部来自真实 MCP 返回,绝不编造;
  • 价格未经核实只显示「价格未核实」;
  • 用户明确确认前,绝不创建订单;创建订单 ≠ 支付成功。

目录


项目演示

McOracle 的完整链路:提问 → 抽取神谕 → 查询真实菜单 → 核实价格 → 生成命运卡 → (用户确认后)下单。

用户:「今天适合辞职吗?」
   │
   ▼  ① 真随机抽取(scripts/draw-oracle.py,secrets 模块)
神谕 NO.021「别在深夜做决定。」
   + 趣味解读「凌晨一点的你和上午十点的你,不是同一个人。」
   + 行动提示 + 重大事项提醒
   │
   ▼  ② 查询真实门店与菜单(MCP:query-nearby-stores / query-meals)
麦当劳深圳松岗沙江路餐厅 · 100+ 可售 SKU
   │
   ▼  ③ 核实价格(MCP:calculate-price,单位:分)
今日必点:板烧鸡腿堡三件套 —— ¥34.50(MCP 实时核实,无优惠)
   │
   ▼  ④ 生成命运卡(scripts/generate-card.py,固定酒红金模板 + 官方商品图)
examples/oracle-card-NO021-official.png(1200×1600)
   │
   ▼  ⑤ 用户明确「确认下单」→ 复核价格 → create-order → 官方支付入口

只问神谕、不想要推荐时,流程到 ① 即止,不会强迫提供位置或调用 MCP。


核心功能与架构

模块文件职责
Oracle Enginescripts/draw-oracle.py + references/oracle-library.json104 条原创神谕真随机抽取、本轮锁定、重抽控制(--question / --redraw / --peek)
Recommendation Enginereferences/recommendation-rules.md神谕标签 → 餐品方向映射,结合真实菜单与预算给出首选 + 备选
MCP AdapterSKILL.md + MCP_INTEGRATION.md调用麦当劳中国官方 MCP 查询门店、菜单、详情、价格与订单
Card Generatorscripts/generate-card.py固定酒红金模板 + 官方商品图合成 + Pillow 程序排版,输出 1200×1600 PNG
Order Safety Controllerscripts/validate-order.py订单状态机与确认铁律,参数变化使确认失效
Skill OrchestratorSKILL.md定义触发条件、执行顺序、工具规则、异常处理与输出格式

神谕库

  • 104 条原创中文神谕,覆盖 8 大分类:
分类键条数
肯定型affirmative11
否定型negative12
等待型waiting13
行动型action13
反转型reversal12
好运型lucky13
幽默型humor13
麦门专属型mcm17
  • 每条包含:id / answer / category / tags / interpretation / action_hint / recommendation_tags / visual_theme。
  • 抽取使用 Python secrets 模块真随机,抽取结果锁定到 _oracle_state.json,同一轮的解释、卡片、推荐引用同一条神谕;只有用户要求重抽才会更换。
  • 文案为本项目原创,不照搬任何受版权保护的《答案之书》内容。

命运卡(正式视觉)

固定「简洁神秘」风格,每次神谕只输出一张:

  • 深酒红渐变背景 + 金色双层边框 + 中央发光圆环 + 少量金色星点星芒;
  • 圆环中央为真实餐品主体(优先官方商品图,严禁用空圆环冒充);
  • 顶部 McORACLE / 麦门神谕,中部神谕编号 + 大字号神谕正文 + 解读;
  • 底部「今日必点」商品名 + 经核实价格(或「价格未核实」)+ 标语「命运可以随机,价格必须真实。」
  • 全程程序排版,中文、编号、价格准确不溢出、不依赖图像模型绘字;
  • 输出尺寸 1200×1600(3:4)。

项目目录结构

McOracle/
├── SKILL.md                      # Skill 编排主文档(触发条件/执行流程/工具规则/异常处理)
├── README.md                     # 本文件
├── MCP_INTEGRATION.md            # MCP 集成说明与实测记录
├── references/                   # 规则与数据
│   ├── oracle-library.json       # 104 条原创神谕(唯一数据源)
│   ├── oracle-rules.md
│   ├── recommendation-rules.md
│   ├── image-design.md
│   └── order-safety.md
├── assets/
│   ├── oracle-card-template.svg  # 正式卡模板的矢量参考
│   └── products/                 # MCP 官方商品图缓存(运行时自动生成)
├── scripts/
│   ├── draw-oracle.py            # 神谕抽取 + 状态锁定
│   ├── generate-card.py          # 命运卡合成与排版
│   └── validate-order.py         # 订单安全状态机(纯逻辑)
├── tests/
│   ├── test-oracle.py            # 神谕库 / 随机性 / 状态锁定
│   ├── test-card.py              # 命运卡真实生成与降级路径
│   └── test-order-safety.py      # 订单安全铁律(Mock,绝不真实下单)
└── examples/
    ├── oracle-card-NO021-official.png   # 正式模板示例(README 首图)
    ├── oracle-card-NO013-official.png   # 正式模板示例
    ├── oracle-demo.md                   # 一次完整神谕交互记录
    └── order-flow-demo.md               # 下单安全流程演示

环境要求与依赖安装

  • Python 3.9+(开发环境使用 3.13)
  • Pillow(仅命运卡生成需要)
  • 可选:WorkBuddy 桌面版 + 麦当劳中国官方 MCP(mcd-mcp)
  • 图像生成能力:正式出卡不需要(模板为程序化绘制)
pip install Pillow

Mac / Linux 中文字体请确保系统存在(开发环境使用 Windows 的微软雅黑 / 楷体等)。脚本会自动按候选列表选择可用中文字体。


安装为 WorkBuddy Skill

  1. 获取代码
git clone <your-repo-url> McOracle
cd McOracle
pip install Pillow
  1. 放入 Skill 目录(二选一)
  • 用户级(对本机所有项目生效):复制 McOracle/ 到 ~/.workbuddy/skills/McOracle/
  • 项目级(仅当前工作区):复制到 {workspace}/.workbuddy/skills/McOracle/
  1. 配置麦当劳中国 MCP(见下一节),并在 WorkBuddy 连接器中启用。

  2. 在对话中触发

  • 「麦门神谕」「抽一签」「今日神谕」「再抽一签」
  • 「我该不该辞职?」(任意问题,神谕式回答)
  • 「我想要完整的今日麦门命运」(神谕 + 真实推荐 + 命运卡)
  • 流程中说「准备下单」→(我展示订单摘要)→ 你回复「确认下单」

说明:脚本可独立运行,不依赖 Skill 加载(见「使用示例」)。SKILL.md 已按官方赛事要求命名;若你的 WorkBuddy 版本要求 Skill 注册元数据,请按本地版本要求补齐(详见「能力现状」)。


麦当劳中国 MCP 配置

MCP 由赛事官方提供,需先在官方控制台申请 Token(参见 官方 MCP 使用指南)。在 WorkBuddy 的 【连接器】→【自定义连接器】→【配置 MCP】中填入:

{
  "mcpServers": {
    "mcd-mcp": {
      "type": "streamablehttp",
      "url": "https://mcp.mcd.cn",
      "headers": {
        "Authorization": "Bearer YOUR_MCP_TOKEN"
      }
    }
  }
}

⚠️ 请将 YOUR_MCP_TOKEN 替换为你自己的 Token,并妥善保管,不要提交到仓库。

本项目调用的工具(名称与参数以实际 Schema 为准):

工具用途状态
now-time-info服务端时间 / 时段判断✅ 已实测
query-nearby-stores到店 / 得来速门店查询✅ 已实测
query-meals门店真实可售菜单(含官方商品图 URL)✅ 已实测
query-meal-detail餐品组成与规格 / 特调✅ 已实测
calculate-price价格 / 优惠 / 总价核实(单位:分)✅ 已实测
create-order创建订单(仅用户明确确认后)Schema 已核实;端到端支付流程见下文说明
query-order订单状态查询Schema 已核实,未实测
query-my-coupons / query-store-coupons优惠券Schema 已核实,未实测
delivery-*(麦乐送)外送链路流程已设计,未实测

详见 MCP_INTEGRATION.md。


图片生成与本地模板回退

正式视觉为固定程序化模板,不依赖任何图像生成 API:

  1. 模板背景:generate-card.py 内置绘制(深酒红渐变 + 金色双层边框 + 中央发光圆环 + 星点星芒),风格永远一致,且永远不会失败。
  2. 餐品主体:按优先级解析——
    • 官方商品图(首选,零成本):query-meals / query-meal-detail 返回的 image 字段(menu-img.mcd.cn),传 --item-image-url,脚本自动下载、验证并缓存;
    • 独立概念插画:无官方图时用 --item-image,卡片如实标注「概念插画」,不冒充官方实拍;
    • 程序概念插画(兜底):脚本内置绘制汉堡 + 薯条 + 可乐,绝不用空圆环冒充餐品;
    • 全部不可用:输出「餐品视觉素材缺失」降级卡,退出码 2、JSON ok=false,如实报告,绝不谎报成功。
  3. 预览模式:--preview --background <AI背景图> 仅用于风格对比实验,非正式输出。

使用示例

脚本独立运行

# 抽取神谕(结果锁定到 scripts/_oracle_state.json)
python scripts/draw-oracle.py --question "今天吃什么?"

# 查看当前锁定神谕 / 重新抽取
python scripts/draw-oracle.py --peek
python scripts/draw-oracle.py --redraw
# 生成命运卡(正式输出:固定模板 + 官方商品图)
# --price-verified 仅在价格经 calculate-price 核实后使用
python scripts/generate-card.py \
  --oracle-id "NO.021" \
  --answer "别在深夜做决定。" \
  --interpretation "凌晨一点的你和上午十点的你,不是同一个人。" \
  --item-name "板烧鸡腿堡三件套" --item-price 34.5 --price-verified \
  --item-image-url "https://menu-img.mcd.cn/.../MS_9900005462_320.png" \
  --out examples/oracle-card-NO021-official.png
# 订单安全控制器演示(纯逻辑 Mock,不创建真实订单)
python scripts/validate-order.py demo

在对话中使用

你:麦门神谕,今天适合辞职吗?
McOracle:(真随机抽中 NO.021)别在深夜做决定。 + 解读 + 行动提示 + 重大事项提醒
          今日必点:板烧鸡腿堡三件套 ¥34.50(MCP 实时核实) + 命运卡 PNG

你:准备下单
McOracle:展示订单草稿摘要(门店 / 取餐方式 / 商品 / 价格)→ 请你确认门店与取餐方式
          (此时不会创建任何订单)

你:确认下单
McOracle:复核价格 → create-order → 返回真实订单号与官方支付入口
          (提醒:创建订单 ≠ 支付成功,不会自动支付)

常见问题

Q:它会自己下单扣钱吗? 不会。只有你明确回复「确认下单」后才会调用下单工具;「看看」「推荐一下」「准备下单」都不算确认。创建订单后仍需你在官方页面自行支付,不会自动支付。

Q:价格和麦当劳 App 不一样? 以门店实时查询结果为准;卡片与对话会标注核实时间。未核实的价格一律显示「价格未核实」,绝不显示示例价冒充实时价。

Q:神谕是预测未来吗? 不是。神谕仅供娱乐与启发,不构成任何现实决策依据。涉及辞职、投资、健康、法律等重大事项时,会附加「请结合现实条件独立判断」的提醒。

Q:没有配置 MCP 还能用吗? 能。神谕与(无商品版)命运卡可正常使用;商品推荐会降级并如实标注「价格未核实」,不会编造餐品。

Q:需要图像生成 API Key 吗? 不需要。正式出卡为程序排版;即使配置了图像 API,Key 也只从环境变量读取,绝不写入仓库。

Q:中文会乱码或溢出吗? 不会。命运卡所有文字由 Pillow 程序排版,自动换行 / 自动缩字号;价格使用含 ¥ 字形的字体。


测试

python tests/test-oracle.py         # 神谕库 / 随机性 / 状态锁定(Mock)
python tests/test-card.py           # 命运卡真实生成与降级路径(本地真实图片)
python tests/test-order-safety.py   # 订单安全状态机(Mock,绝不真实下单)

当前实际结果:24 / 24 全部通过(三套退出码均为 0):

测试项数结果覆盖要点
test-oracle.py6✅加载 104 条、编号唯一、8 分类齐全、200 次抽取随机性、状态锁定与重抽控制
test-card.py9✅正式模板默认出卡、1200×1600、餐品进入圆环(像素级校验)、单卡输出、预览需显式开关、素材缺失降级(ok=false 退出码 2)、未核实价格分支、动态内容非硬编码、超长文本不溢出
test-order-safety.py9✅未确认不得下单、「看看/推荐一下/准备下单/先不/算了」均不算确认、价格与商品变化使确认失效、无真实订单号不得标记下单成功、创建订单 ≠ 支付成功、非法状态转移被拒

说明:test-oracle.py 与 test-order-safety.py 为纯逻辑(Mock)测试,不调用任何 MCP 工具、不创建真实订单;test-card.py 在本地产出真实 PNG 用于校验(不依赖网络)。


能力现状:已验证 / 未验证 / 已知限制

✅ 已真实验证(真实 MCP 调用 + 真实文件产出)

  • 门店查询、真实菜单、餐品详情与特调、价格计算(含优惠与取餐方式);
  • 官方商品图 URL 可真实下载并验证(menu-img.mcd.cn,HTTP 200);
  • 命运卡 1200×1600 PNG 真实生成(正式模板 + 官方商品图合成);
  • 餐品素材缺失时的降级路径(不静默失败);
  • 订单安全状态机(Mock)。

⚠️ 未完成端到端验证 / 未实测

  • 完整「下单 → 支付 → 状态回查」流程尚未作为闭环验证:create-order 的 Schema 已核实,接口已在真实会话中实测调用并返回订单(状态「待支付」),但支付环节未执行、query-order 状态回查未验证,因此本项目不声明端到端下单 / 支付流程已通过验证。
  • 麦乐送(外送)链路(delivery-query-stores、地址、运费)未实测。
  • 优惠券领取与核销路径未完整实测。
  • 官方商品图无法覆盖时的概念插画实际观感(降级路径与测试已覆盖)。

已知限制

  • 到店自取与得来速走 orderType=1,外送走 orderType=2(需配送地址),两类参数不可混用;
  • 价格单位为「分」,展示前需 ÷100,且具有时效性;
  • Skill 自动加载与注册元数据依赖 WorkBuddy 版本,请按本地版本要求核对(见下)。

安全、隐私、品牌与免责声明

安全与隐私

  • 未确认绝不创建订单;商品 / 数量 / 门店 / 价格 / 取餐方式任一变化都会使旧确认失效,必须重新展示摘要并再次确认;
  • 不自动支付;不伪造订单号或下单成功消息;异常如实反馈;
  • 不编造商品、价格、优惠、库存、门店;无实时数据时标注「价格未核实」;
  • 不收集、不存储用户隐私;仓库内不含 Token、Cookie、订单号或个人凭据;
  • Token / API Key 仅通过环境变量或连接器配置读取,绝不写入源码或仓库。

品牌与免责声明

  • 本项目为麦当劳中国开发者创新挑战赛参赛作品,非麦当劳官方产品,与麦当劳官方无隶属关系,不暗示任何官方背书;
  • 「麦当劳」「McDonald's」及相关商标、商品图片归其各自权利人所有;本项目仅通过官方 MCP 接口调用其服务;
  • 餐品、价格、供应状态以麦当劳官方渠道实时结果为准;
  • 神谕内容为娱乐与启发用途,不构成任何预测、建议或决策依据;涉及重大人生、医疗、法律、财务决策请咨询专业人士。

许可证与贡献

  • 本项目仅用于学习与技术演示。神谕文案为本项目原创。
  • 使用本项目即表示你同意自行遵守麦当劳《MCP 服务规则》与《使用条款》,并自行申请与管理 MCP Token。
  • Issue / PR 欢迎,但请勿在提交内容中包含 Token、订单号或个人敏感信息。

参赛文件清单(依据官方赛事要求)

文件说明状态
README.md项目介绍、安装、示例、目标用户✅ 本文件
CONTEST_DECLARATION.md参赛声明(官方原件,文件名与内容均不可改动)⚠️ 缺失,需从官方仓库原样获取
MCP_INTEGRATION.md实际使用的 MCP Server / Tool / 调用流程 / 业务价值✅ 已提供
源代码项目主体✅ 已提供
workbuddy.mdWorkBuddy 开发对话上下文(参加 WorkBuddy 专项奖励时必交)⚠️ 未提供(可选)

CONTEST_DECLARATION.md 必须从官方仓库原样复制,不得自行改写: https://github.com/M-China/mcd-developer-innovation-challenge/blob/main/CONTEST_DECLARATION.md

关于 About

不要问 AI,问薯条。一个结合麦当劳 MCP 与 AI 答案之书的 Skill。

语言 Languages

Python100.0%

提交活跃度 Commit Activity

代码提交热力图
过去 52 周的开发活跃度
1
Total Commits
峰值: 1次/周
Less
More

核心贡献者 Contributors