mcd-fit-planner
根据循环训练日与营养目标推荐麦当劳搭配,比较套餐价格和营养,记录实际摄入与消费,生成月末年末吃麦网页及分享长图。用户要按计划吃麦、顺延训练日、查账本或回顾吃麦与健身目标时使用。
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
실행 점수 미검증
설치 방법 보기포함된 파일(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(원문)
설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
麦当劳饮食计划助手
用本技能内 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 遵守本流程。任何营养结果都是餐品参考数据,不承诺控制体重或训练效果。
리뷰
아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
댓글
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.