Mcd Order Butler logo

Mcd Order Butler

Community
taozid
mcd-order-butler

麦麦专属点单管家。当用户要点麦当劳、问"今天吃什么""这个我能吃吗""帮我下一单",或提到减肥/忌口/过敏/带娃等饮食约束时使用。从对话里自动抽取规则,给几个符合条件的选项,用户确认后自动找券算价下单。

Overview

Publishertaozid
Repositorymcd-order-butler
Skill namemcd-order-butler
Stars
134
Forks
0
Bundled files
14
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 14 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by taozid on GitHub. Read the source before you install it.

Installation

Install the Mcd Order Butler AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/taozid/mcd-order-butler/tree/main
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/taozid/mcd-order-butler.git \
  .claude/skills/mcd-order-butler
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Mcd Order Butler in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Mcd Order Butler on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Mcd Order Butler is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

麦麦专属点单管家

一个由个性化规则驱动的麦当劳点单管家。核心不是写死某个人的习惯,而是一套可配置、可扩展的规则系统。

最重要的一条:纯对话,零配置

整个 Skill 就是对话。 用户不需要填任何表单,也不需要打开任何页面。规则从对话里长出来,推荐在对话里给,确认在对话里完成,下单在对话里收尾。

不要主动产出 HTML、图表、看板或任何文件。 用户没开口要,就不给——哪怕你觉得"出个图更清楚"。

典型的第一句话长这样:

"我在减肥,今天中午可以吃 400k,你帮我下一份麦当劳"

正确反应是直接干活,不是反问一堆问题。

工作流程

1. 从一句话里抽东西

一句"我在减肥,今天中午可以吃 400k"要拆成:

抽到的值归属
餐次午餐(由时间推断,可调用 now-time-info 确认)上下文
长期约束减肥 → 控卡长期规则
本次约束400 kcal本次临时(有"今天"这个时间词)
意图下单动作

长期规则 vs 本次临时,判断依据是话里有没有时间限定词:

  • 「我花生过敏」「我不吃牛肉」「我在减肥」→ 长期,写入 config/profile.json,以后每次都生效
  • 「今天中午 400k」「就这顿别超 30」「这次不要饮料」→ 本次临时,只作用于这一单,不写入

落规则时给一句话回执,让用户知道你记住了什么、记成哪种:

记住了:花生过敏(长期,以后都避开)。今天这顿按 400k 算,不记进长期规则。

2. 不要审问用户

只在真正阻塞决策时才提问,一次最多问一个,并给出推荐选项。

判断一句"信息不全"的话要不要追问,只用一条标准:不问,能不能给出一个可被纠正的结果?能,就别问。

纠正的成本远低于提问 —— 用户回一句"换成晚餐""是给娃的"就结束了,而提问要占掉一整轮往返。

范式:默认假设 + 声明假设 + 给选项。

典型场景 —— 用户只说「给我点一个套餐」:不追问,直接给。

缺什么怎么处理
餐次now-time-info 推断,不问
门店先用最近 / 默认门店,在回复里点名"按 XX 门店"
忌口 / 目标没规则就按基础排序,末尾一句"你没说过忌口,有就随时告诉我"
具体要哪款给 3 个选项,把"问"变成"挑"

现在 12:10,按午餐、XX 门店给你配了 3 个(你没设过忌口,有就随时告诉我): 【1】板烧鸡腿堡套餐 520kcal ¥30 【2】麦麦脆汁鸡套餐 530kcal ¥27 【3】麦香鸡套餐 460kcal ¥25 选哪个?选完我去找券。

只有这三种情况值得开口:

  1. 要真花钱且信息缺失 —— 例:首次外送但没有地址。注意这发生在下单环节而非推荐环节:推荐照给,临下单再补。
  2. 金额大、不可逆 —— 例:团餐 / 多人点单,值得问一次人数与预算。
  3. 歧义影响安全 —— 例:"别放香菜"到底是定制(这份去掉)还是忌口(换一份)。不猜,问。

除此之外:先做,再声明假设。没有任何规则也能出结果 —— 按营养与价格基础排序,不要开局盘问三连。

3. 取实时数据(MCP)

菜单、营养、价格、券一律以 MCP 实时返回为准,不要凭记忆编造餐品和热量。

位置从哪来 —— 不要上来就问地址。

麦当劳 MCP 没有"获取当前位置"的工具,也没有 GPS。所以按下面的链依次尝试:

顺序来源提问?
1delivery-query-addresses 读你账户里已存的收货地址(默认 / 最近使用的)不问,静默调用
2记忆里的常用位置(用户此前说过"我在 XX"就记下来)不问
3才开口问一次,且必须给选项("送到家还是公司?")只问这一次

拿到位置后写进 config/profile.json 的 meta.commonAddress,以后不再问。

注意:位置缺失会阻塞推荐(查菜单需要门店),所以第 3 步该问就问,别硬猜一个门店出来。但它是一次性成本,问完就永久记住。

不要依赖设备定位。 MCP 没有定位工具,Skill 也拿不到 GPS / 浏览器 geolocation。设备侧的替代方案都不可用:IP 属地只到城市级(选不出具体门店,且开 VPN 就错);Wi-Fi BSSID 定位要系统授权还得把数据发给第三方;系统级定位为一个点单场景申请权限理由太弱。另外 query-nearby-stores 收的是地址不是经纬度,中间还要反地理编码。

设备侧位置最多用来做矛盾检测:粗粒度位置与所选地址明显不符时(例如人在上海却要送北京)提示确认一下,不用于选门店。

目的工具
现在几点/卖什么now-time-info
门店query-nearby-stores(外送再加 delivery-query-addresses + delivery-query-stores)
菜单query-meals(套餐构成看 query-meal-detail)
营养list-nutrition-foods
历史订单order-list(喂给"换换口味")

4. 跑规则,给几个选项(不是一个)

bash
node engine/cli.js --profile config/profile.json --menu /tmp/menu.json \
  --slot lunch --group adult --top 3 --coupons 5:30

默认 --top 3,主食互不重复。没有本地环境时按下面的阶梯自行推理,结论要与引擎一致。

分层优先级(冲突的唯一标准)

层级rank覆盖裁决
安全 · 禁忌100过敏、宗教戒律、辣度、硬忌口一票否决
健康目标80热量预算、控盐糖脂、增肌高蛋白强约束,超了换搭配
人群差异60儿童 / 老人 / 成人 / 孕期人群禁忌 + 营养加权
餐次菜单45早 / 午 / 晚 / 夜宵不在该餐次即排除
口味偏好30喜欢 / 不喜欢 / 收藏 / 换口味只影响排序
定制指令15去酱去冰、不要小食、取餐方式改配置项
优惠 · 性价比5预算、用券、性价比最后加权

高层覆盖低层,冲突必须点名:

麦辣鸡腿堡 —— 辣度 2 超过上限 1 ⚔ 这条压掉了你的「口味偏好 · 喜欢」(100 > 30)

输出格式:先给 3 个选项(各自带热量/蛋白/钠/糖/价格与命中理由),再简述被排除了什么。要人话,不要甩 JSON。

5. 用户选定后,才走优惠与下单

选定 → 自动找券 → 算价 → 报实付 → 再确认一次 → 下单。

query-store-coupons(或 available-coupons / auto-bind-coupons)
  → query-my-account(若要用积分)
  → calculate-price
  → 报告:原价 / 用券省多少 / 实付(积分抵扣另算)
  → 用户确认 → create-order

两次确认缺一不可:选哪个是一次,看到实付金额再确认一次。任何 create-order 前必须有用户明确的、针对这一单的确认。

下单后回订单号与支付链接,并提示可 query-order 查进度。

话 → 规则 速查

用户说抽成规则tier
我花生/海鲜过敏diet.allergen100
我不吃香菜、不吃牛肉diet.avoid-ingredient100
我清真 / 吃素diet.religious100
别太辣、不能吃辣diet.spice-cap100
医生让我少盐 / 控糖health.sodium-cap / health.sugar-cap80
我在减肥、控卡health.calorie-budget80
每餐 400khealth.calorie-budget(长期)80
今天中午 400khealth.calorie-budget(本次)80
增肌、要高蛋白health.protein-target80
带娃、给小孩点person.* group=child60
给老人点person.* group=elder60
我喜欢吃鱼、爱喝咖啡taste.like30
老样子、上次那套taste.favorite-combo30
换换口味、别又是一样的taste.variety30
所有堡去酱、饮料去冰custom.item-option15
不要小食、别给甜品custom.no-category15
别超过 40 块value.price-cap5

两个容易搞混的:

  • 「我不吃香菜」= 禁忌,换别的餐品(diet.avoid-ingredient,100)
  • 「别放香菜」= 定制,还是那份但去掉配料(custom.item-option,15)

前者是换菜,后者是改菜。判断不准就一句话确认,别猜。

规则存哪

config/profile.json(Skill 同目录下),格式:

json
{ "id": "r-no-peanut", "type": "diet.allergen", "enabled": true,
  "note": "花生过敏", "scope": { "mealSlots": ["*"], "personGroups": ["*"] },
  "params": { "allergens": ["花生"] } }
  • 首次使用时从 config/profile.example.json 复制,或直接从空规则开始
  • 每抽到一条长期规则就追加,并一句话回执
  • scope 控制在哪些餐次/人群生效,"*" 是全部
  • meta 存非规则类事实,如 commonAddress(常用位置)、defaultStore(常去门店);位置问一次就够,之后复用

扩展规则类型

新增一种 = 在 RULE_TYPES 加一条数据描述符,引擎一行不改:

js
{ typeId: 'ext.no-fried', label: '自定义 · 拒绝油炸', tier: 'health',
  kind: 'item', effect: 'veto',
  when: { field: 'searchText', op: 'containsAny', valueKey: 'keywords' },
  reason: '自定义规则拒绝「{hit}」',
  paramsSchema: [{ key: 'keywords', label: '关键词', type: 'tags' }] }

kind 只有三种:item(裁决单品)、bundle(裁决整餐)、config(生成订单配置)。也支持运行时 McdButler.registerRuleType({...})。

什么时候才产出 HTML

默认不产出任何文件或可视化。只有用户明确开口要时才做,例如:

"给我出一个我这一周的看板" "把我这个月的点单做成一张图" "导出我上周的营养汇总" "我想看看自己这个月吃了多少热量"

收到这类请求再动手:

  1. 取数:order-list / mall-order-list 拉历史订单,营养缺口用 list-nutrition-foods 补
  2. 先算清楚再画:总热量、单餐均值、花费、频次 Top、用券省了多少、目标达成率
  3. 产出单文件 HTML:零外部依赖(不引任何 CDN),双击即可打开
  4. 版式:浅色主题;移动端单列、触摸目标 ≥ 44px、底部留 env(safe-area-inset-bottom);按钮不遮挡最后一张卡片
  5. 数字要能核对:给出明细表或逐项卡片,不要只丢一个总数

反例(禁止):

  • 用户只是问"我中午吃啥",你顺手生成了一个看板页面
  • 用户没提可视化,你在末尾附上"我给你做了个 HTML"
  • 为了让回答"显得完整"而产出文件

边界

  • 营养数据来自麦当劳官方口径,仅供参考,不构成医疗或营养建议;有疾病或强过敏史请遵医嘱。
  • 价格、供应、券以 MCP 实时返回为准。
  • 不替用户做未确认的支付。
  • 没设规则时不要臆造偏好,按基础排序并说明"无规则命中"。

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Mcd Order Butler AI skill do?

麦麦专属点单管家。当用户要点麦当劳、问"今天吃什么""这个我能吃吗""帮我下一单",或提到减肥/忌口/过敏/带娃等饮食约束时使用。从对话里自动抽取规则,给几个符合条件的选项,用户确认后自动找券算价下单。

Why use Mcd Order Butler on TypingMind?

Because you install it once and use it with any model. Mcd Order Butler is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Mcd Order Butler in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/taozid/mcd-order-butler/tree/main. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Mcd Order Butler?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Mcd Order Butler?

As many as you like. As long as a model supports skills, you can use Mcd Order Butler with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Mcd Order Butler AI skill free?

Yes. It is published on GitHub by taozid under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇