Skip to content
cccskills
FreePublished on GitHub

mcd-fit-planner

根据循环训练日与营养目标推荐麦当劳搭配,比较套餐价格和营养,记录实际摄入与消费,生成月末年末吃麦网页及分享长图。用户要按计划吃麦、顺延训练日、查账本或回顾吃麦与健身目标时使用。

The English summary is being prepared. Showing the original description.

tomsbin/mcd-fit-planner119 stars(GitHub 119 + cccskills 0)

Run score Not tested

See how to install

Files included (26)

  • SKILL.md15.0 KB
  • assets/big-mac-official.png394.2 KB
  • assets/corn-small-cn.json524 B
  • assets/meal-report.html9.7 KB
  • assets/recap.css24.3 KB
  • assets/recap.html9.8 KB
  • assets/recap.js6.8 KB
  • references/catalog-builder.md8.8 KB
  • references/hosts.md3.5 KB
  • references/local-data.md5.0 KB
  • references/mcp-flow.md18.8 KB
  • references/meal-report.md2.0 KB
  • references/nutrition-report.md7.8 KB
  • references/period-recap.md4.9 KB
  • references/third-party-notices.md3.7 KB
  • references/workbuddy-setup.md1.9 KB
  • scripts/catalog_builder.py21.7 KB
  • scripts/fit_core.py66.2 KB
  • scripts/mcp_adapter.py33.9 KB
  • scripts/meal_report.py3.8 KB
  • scripts/nutrition_report.py8.1 KB
  • scripts/nutrition_support.py8.0 KB
  • scripts/period_recap.py10.5 KB
  • scripts/recap_art.py7.1 KB
  • scripts/recap_demo.py3.2 KB
  • scripts/recap_render.py10.3 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

麦当劳饮食计划助手

用本技能内 scripts/fit_core.py 完成计划、营养计算与账本操作。以技能文件所在目录解析脚本路径,所有调用输出 JSON。Python 3.11+,标准库,无本地网络客户端。MCP 通过宿主 Agent 的官方连接器调用。

首次配置和命令见 references/local-data.md;推荐/下单时读取 references/mcp-flow.md。联网补充缺失营养与最终报告见 references/nutrition-report.md。在 WorkBuddy 安装与首次只读验证见 references/workbuddy-setup.md。先确认 Python 3.11+ 可用。本地库默认技能目录下 data/;为跨技能升级保留账本,首次在用户选择的固定目录指定 --db <绝对路径> 并保存该路径,之后统一使用。更换数据库路径时先确认是否是用户原有账本;不要无意建立多个真实账本。

推荐时优先按 references/catalog-builder.md 使用 catalog_builder.py:只查询选中根商品的详情,自动按真实轮次/数量生成杯型、套餐组件和营养候选。避免逐个手写serving/components或全量扫描菜单。详情缺失/默认有歧义会明确阻止该根商品;缺任一酱料等营养仍保留未知下限。快照可直接进入recommend→price-requests→quotes→review→nutrition report。

默认套餐优先(0.7.0): 点一餐时,先用 requests --menu <原始菜单> 自动加入相关套餐与限额内超值搭配,或先 discover 输出扩展后的selection;不要只喂汉堡、薯条、可乐几个单品。builder也会重新发现遗漏套餐,缺详情/可行套餐未核价时review不完整、preview拒绝。读取 preferred 优先展示符合目标及预算的套餐,同时展示原单及真实价差,cheapest仍仅指已报价范围。只有单品最省不代表套餐比较已完成。

保留用户指定的主食、份数及配餐要求,用已保存required_ids或明确的--require;必要时使用requested_baskets。不能把“巨无霸换鸡排堡”描述为原单同餐优惠:必须展示换了什么、营养已知下限/缺口、价差,经用户明确同意才能换。套餐营养不符/超预算则解释并给合格参考,不放宽目标。用户明确只单点可在selection设bundle_policy=single_items_only并记录bundle_policy_reason;只买饮料/配餐不自动加整餐。

推荐无预算内方案时,展示 closest_over_budget 及 over_budget_cents,明确它只是符合其余要求的已核价参考,不自动增加预算。需要选餐页面时读取 meal-report.md,运行 meal_report.py --input <recommend结果JSON> --output <HTML>。页面展示预算余量、真实组成、整餐营养与两方案变化,修改预算只筛选已有快照;选择超预算参考后须更新用户同意的预算并重新推荐、核价、review 和确认。无合格报价时不虚构兜底。

应付为0的报价当前统一进入待核实,不参与最省/套餐推荐、不自动下单。核查实际选配、可售和券权益,不把0元直接叫免费,也不把它直接断言为不可售。单杯无糖可乐的营养0值和待支付账本0支出不受影响。

一次录入,之后直接推荐

首次集中录入循环起点、循环模板、每个模板的每日及各餐营养目标/预算、休息模板、默认门店/取餐方式与口味。目标由用户输入或已有计划提供;示例目标不是用户设置,不能直接写入真实账本。没有用户目标就只比较营养与价格,不推导个体饮食处方。必要信息一次补齐,之后读取保存的设置,不重复询问。

执行 plan 或 schedule 读取当日模板,日期采用 Asia/Shanghai。用户仅说“推荐午餐”时使用已保存目标、门店和预算;不要求每天先填写早餐。其他餐食未确认完整时按当餐预设目标推荐,注明全天统计覆盖不足。

临时休息并顺延:override --mode rest;跳过训练但继续循环:--mode skip;撤销该日覆盖:--mode normal。计划内休息照常推进,临时休息不推进。高碳日与模板一起顺延。没使用助手的日期仍按计划推进。修改昨天可以重排后续计划,但不修改历史饮食或付款。

推荐与修改

调用官方工具获取当店可售菜单、营养、套餐详情与优惠。用 scripts/mcp_adapter.py 解析官方原始返回(包含 TOON 营养表),不要手动重打 MCP 营养数值或金额。只按有证据的名称/规格匹配营养;不同规格、季节产品、特制去酱不得猜测。缺失时主动用宿主联网搜索,先查麦当劳中国官网,再查有明确产品、规格和数据来源的数据库;包括套餐组件、蘸酱和饮料。 将核实的网页数据用 nutrition_report.py supplement 补入快照,保留 URL、地区、份量、核查日期,估算必须标区间。不应只因 MCP 没列出就停止查询;查后仍缺失说明已查来源和缺口,未知不能视为零。将选定规格标准化,执行 recommend 获取最多 12 个待计价候选,再生成 price-requests 并按官方 schema 逐个 calculate-price,使用适配器回填报价执行第二阶段推荐。代码不把低热量视为最优,也不悄悄放宽目标。

用户要求替换时保留指定餐品。通过 compare 展示价格、热量、蛋白质、碳水、脂肪变化,说明目标改善与代价;只有同门店同取餐方式的实时报价才可声称便宜多少。没有合格方案说明冲突,用户同意后才改目标。价格最低只限已计价候选。

用户直接列餐品要求点单时,也必须主动进行套餐和现有优惠比较。 先计算原单,再查相关套餐详情与可用券,按明确的具体选项真实计价。比较保留原餐品的方案,以及需替换/增加配餐的方案;额外买会员卡的展示价不能当作无条件优惠。不要把“原单核价成功”当作“套餐推荐完成”。

菜单转换每项必填已核实 serving,不能依赖营养表通常为空的 nutritionDescription。杯型/块数可通过 spec 与 spec_evidence 指定,字符归一只处理全半角/空格,不模糊删除“无糖”等配方差异。优先自己查详情取得规格,信息不足时才问用户;不是每个单品都重新询问。按适配器输出 nutrition_warnings 补齐未匹配项。

通过适配器 coupons 规范化 query-store-coupons,再 price-requests --coupons ... 生成原参数与单券变体。按 request_id 保存响应,不能按餐品 key 覆盖不同券的结果;由 quotes 取成功有效的最低应付总价,包含配送/打包等费用。券名不用于计算折扣,未领取券不算持有券,多券叠加不自行推断。赠品、凑单配餐需另建明确组合,纳入营养和增减说明;不要因免费就不计热量。

用户说“两份”时,将该组合加入 snapshot.requested_baskets,并用 required_quantities 表达必须份数;目标冲突应说明,不能偷偷变成一份。用户要求“原样三件,不增减”时 review 使用 --exact-contents;传入当前预算 --budget-cents 和排除项 --exclude。成功报价也不代表全部优惠比较完整:将 quote_failures 数量、coupon_comparison.unresolved 数量与实际分页完整性带入 review checks。限额未报价的优惠明确标注范围,不宣传全局最低。

recommend 和 review 的 --exclude 可直接传菜单根编码,如 9900005462 9900005466,会排除这两个商品的全部套餐变体;完整的 根编码~变体摘要 只排除指定变体。普通单品编码同时排除含该单品的套餐,不用Agent枚举内部变体ID。套餐根项的 nutrition: {} 由组件求和,整餐必须使用 aggregate/recommend/nutrition report 的结果,不直接读根项的kcal。

用 review 返回明确状态:better_equivalent_found 为原样更省;changes_required 为更省但需要改餐品;no_better_found 为已检查范围内没有满足要求的更省推荐;incomplete 为还没查完/报价失败,不能说没有推荐。把推荐价、价差和餐品变化主动展示给用户。如果没有推荐,明确说出原因和检查范围。联网补充后仍有未知营养时,不承诺替换后能量或脂肪下降。

同时查看 nutrition_recommendations;同价或预算内更符合已录营养目标的方案也要主动展示,不因“没更便宜”就说没有建议。高碳日仍按碳水目标评价,不一律换无糖。原单营养未知时只能说替代方案符合参考目标,不能证明比原单更低。decision比较原本那餐的应付/营养变化,不把券面值、即将过期或未领取状态当作必须多点的理由。规范化quote已带每行上下文;用适配器review-checks生成完整checks,仅实际查询后加checked标志。

每次推荐或点餐,最终附上整餐营养汇总。 对最终选择运行 nutrition_report.py report,展示总 kcal、蛋白质/碳水/脂肪、完整值/估算区间/已知下限、来源,以及成年男性与女性全天参考能量占比。年龄或活动水平没保存时注明示例人群,不猜用户的性别、身高、体重。健身评价读取当前训练/高碳/休息模板,与预录当餐目标及已知全天剩余额度比较,说明哪些符合、哪些不足/超出/不确定。未配置个人目标就明确暂不能判断;不能用性别参考值自动推定个人处方或把一顿饭判为满足全天需求。成人参考不适用的生理状态只用用户已有目标。报告是候选餐评估,不写入实际摄入。

recommendation_status=single_option_only 表示只有一个合格报价,没有形成有效价格对比。即使它带 cheapest 标签,也不能宣传是最省套餐。

记录与账本

饮食 record-intake 按实际食用份数记,来源区分 official / official_web / estimated / manual,并保留网页证据。订单生成时不记成已吃;用户确认吃了什么后再记。同一记录 ID 更新代表修正。未知营养与估算必须保留;区间不擅自转成点值。

摄入记录明确填写 venue: mcdonalds / other / unspecified,其他餐食不当作吃麦营养。代码保存录入时目标快照,旧记录不拿今天的计划回填。用户明确确认全天吃喝已记全,才执行 close-day --complete yes;coverage 仅表示截至目前完整。新增或纠错会撤销该日全天确认。

订单通过 query-order / order-list 核对后,由适配器 orders 转换并 import-bills 合并;手工补记用 record-bill。只确认付款时录入 paid,未付款记录 pending 且 paid_cents=0。以相同非敏感账户别名和订单号生成 SHA-256 稳定账单 ID,不把原始订单号存入账本。部分退款/全额退款累计更新同一条,避免重复。取消状态无法证明是否付过款时留为 unresolved,不推测为零支出。已付款取消应保留付款,退款确认后再更新。消费日期沿用原订单日期。先前的饮食记录不随退款自动删除。

report --period YYYY-MM / YYYY 和 export 查询月年账本。只说“本地已记录消费”,不能把近期订单接口当完整年度历史。账户凭证、地址、手机号、支付链接不写入账本。下载 CSV 只保存账单,不含 Token。

月年总结与宿主接入

用户要月末/年末吃麦总结图时,读取 period-recap.md,运行 period_recap.py --db <固定账本> --period YYYY[-MM] --output <网页> --svg <长图> --png <图片>。只读真实账本,展示消费、常点榜、实际吃麦营养、已保存目标评价与缺失情况。无数据不编造,估算与未记录日期不算可核实达标;一餐不能证明全天或训练效果达标。交付 HTML 和实际成功生成的图片链接;可美化版式但保留计算事实,不自动分享。

WorkBuddy、Codex 与基于 DeepSeek 的 Agent 接入见 hosts.md。DeepSeek 需要支持 MCP、技能文件和本地 Python 的宿主,不能将普通聊天窗口写成直接可安装。已有连接器设置保留,只合并所需配置;总结功能不需要模型 API Key。

下单边界

价格比较后,用 review.comparison_summary 展示原单应付、同餐品节省、改餐品节省和整餐营养变化。same_contents 与 changed_contents 分开说明;后者即使更便宜也需确认变化。摘要为 incomplete 时不能进入下单确认,优惠变体截断须补查或缩小用户同意的比较范围后重跑。多券拆单先说明订单数量、每单含费用的应付合计,核对券不重复占用;用户明确选择后才分别确认和创建。不得用他店历史券规则保证本次优惠,也不为凑门槛自动加餐。

推荐不是下单授权。先完成套餐/优惠 review 并展示结论,preview --review <结果文件> 才能出确认摘要(门店、取餐方式、餐品及规格、价格、修改项、预约设置)。展示给用户,明确确认后重新计价,再 authorize 检查未变化并取得一次性参数。仅调用一次官方 create-order,付款由用户完成。结果不明先查订单,不能盲目重试。已创建订单后只展示替换建议;不能擅自取消或另外创建新单。领券、取消订单需要对应的用户指令。模拟数据不得用于真实下单。

进入预览前用适配器 prepare-order --quotes ... --key ... --fulfillment ... 自动复制已计价的商品/券/套餐参数,只另补取餐方式或配送地址与备注。到店取餐方式必须来自本次报价的 takeWayList。确认前新报价也用同一 fulfillment 再执行 prepare-order;券失效、价格或参数变化须重新预览,不能悄悄删券按原价下单。没有券正常比较套餐,不要求用户先领券。promotion_hint 仅是未满足门槛的提示,凑单须另核应付与整餐营养。引用逻辑及MIT许可见 第三方声明。

takeWayCode 是字符串,已捕获的到店值包括 eat-in / locker-out,不可自行改成数字或中文;是否本次可用只以本次 takeWayList 为准。

当前实际返回的 payH5Url 是官方扫码页,页面生成的二维码指向 /mcp/jumpToApp。向用户说明这个入口用于唤起官方 App,不能承诺直接在本聊天付款,也不要宣称已验证其他付款渠道。提供官方返回的链接,付款完成须查询订单核实。

代码只能核对预览、参数、金额和一次性标识;是否收到人类确认由 Agent 遵守本流程。任何营养结果都是餐品参考数据,不承诺控制体重或训练效果。

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

Report a problem with this skill