Not in the top 1,000 by GitHub stars

tomsbin/mcd-fit-planner

今天练什么,这一餐就怎么选。按训练计划比较麦当劳套餐实价和营养,临时休息顺延,生成月年吃麦手账。免安装在线体验 · 官方 MCP · WorkBuddy / Codex / DeepSeek Agent

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

skill/mcd-fit-planner/SKILL.md

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → c988b1f667ea

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit c988b1f667ea5cf8f6c41b3773b6935842004df1

118GitHub stars
-2stars in 7 days
1skill in this repository
10commits in 30 days

Heat

1.3
  • Star growth, last 7 daysNot available
  • Star growth, last 24 hoursNot available
  • Rank movement, last 7 daysNot available
  • Commits, last 30 daysNot available
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekNot available

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Oct 25, 2026Nov 6, 2026121

30-day change not yet available: not enough history.

Individual skills in this repository

How it works

mcd-fit-planner

When your agent uses it

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

What it loads into context

Frontmatter

79 tokens

Always available to the agent

SKILL.md

3,922 tokens

When the skill is activated

Reference documents

15,060 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. 一次录入,之后直接推荐
  2. 推荐与修改
  3. 记录与账本
  4. 月年总结与宿主接入
  5. 下单边界

Scripts executed separately

  • assets/recap.js
  • scripts/catalog_builder.py
  • scripts/fit_core.py
  • scripts/mcp_adapter.py
  • scripts/meal_report.py
  • scripts/nutrition_report.py
  • scripts/nutrition_support.py
  • scripts/period_recap.py
  • scripts/recap_art.py
  • scripts/recap_demo.py
  • scripts/recap_render.py

Files

  • SKILL.mdcore15,330 bytes
  • assets/big-mac-official.pngasset403,614 bytes
  • assets/corn-small-cn.jsonasset524 bytes
  • assets/meal-report.htmlasset9,901 bytes
  • assets/recap.cssasset24,932 bytes
  • assets/recap.htmlasset10,064 bytes
  • assets/recap.jsruns6,934 bytes
  • references/catalog-builder.mddoc8,968 bytes
  • references/hosts.mddoc3,572 bytes
  • references/local-data.mddoc5,088 bytes
  • references/mcp-flow.mddoc19,236 bytes
  • references/meal-report.mddoc2,054 bytes
  • references/nutrition-report.mddoc7,952 bytes
  • references/period-recap.mddoc5,002 bytes
  • references/third-party-notices.mddoc3,756 bytes
  • references/workbuddy-setup.mddoc1,935 bytes
  • scripts/catalog_builder.pyruns22,185 bytes
  • scripts/fit_core.pyruns67,742 bytes
  • scripts/mcp_adapter.pyruns34,756 bytes
  • scripts/meal_report.pyruns3,885 bytes
  • scripts/nutrition_report.pyruns8,288 bytes
  • scripts/nutrition_support.pyruns8,159 bytes
  • scripts/period_recap.pyruns10,721 bytes
  • scripts/recap_art.pyruns7,303 bytes
  • scripts/recap_demo.pyruns3,274 bytes
  • scripts/recap_render.pyruns10,597 bytes
Read SKILL.md

# 麦当劳饮食计划助手

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

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

推荐时优先按 [references/catalog-builder.md](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](references/meal-report.md),运行 `meal_report.py --input <recommend结果JSON> --output <HTML>`。页面展示预算余量、真实组成、整餐营养与两方案变化,修改预算只筛选已有快照;选择超预算参考后须更新用户同意的预算并重新推荐、核价、review 和确认。无合格报价时不虚构兜底。
View the complete source on GitHub

Skills included

  • mcd-fit-planner

Repository facts

License
MIT
Created
Oct 15, 2026
Last pushed
Oct 25, 2026
Forks
1
Open issues
0
Project activity
Active

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 5, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 3 notes
  • skill/mcd-fit-planner/assets/recap.css:4 Analysis incomplete: physical or joined line exceeds character limit
  • skill/mcd-fit-planner/assets/recap.css:5 Analysis incomplete: physical or joined line exceeds character limit
  • skill/mcd-fit-planner/assets/recap.css:6 Analysis incomplete: physical or joined line exceeds character limit
Show all 64 signals by file

skill/mcd-fit-planner/assets/corn-small-cn.json

  • Network accessline 9
    },   "evidence": {     "url": "https://www.mcdonalds.com.cn/product/Corn-Cup/",
  • Network accessline 10
    "evidence": {     "url": "https://www.mcdonalds.com.cn/product/Corn-Cup/",     "product_name": "玉米杯",
  • Network accessline 11
    "url": "https://www.mcdonalds.com.cn/product/Corn-Cup/",

skill/mcd-fit-planner/assets/recap.html

  • Network accessline 37
    <div class="table-tools"><h3>吃麦餐食 · 目标明细</h3><label>筛选 <select id="filter"><option value="all">全部结果</option><option value="within">达标</option><option value="estimated_within">估算达标</option><option value="outside">超出或不足</option><option value=
  • Network accessline 38
    <h3>全天记录 · 另行核对</h3><p>只有用户确认全天吃喝录全的日期才判断全天目标。新增或纠错会撤销该日确认;一餐达标不等于全天或训练效果达标。</p><div class="scroll"><table><thead><tr><th>日期</th><th>全天录全</th><th>结果</th><th>实际 / 目标</th></tr></thead><tbody>$daily_rows</tbody></table></div> <h3>统计说明</h3><ul>
  • Network accessline 39
    <h3>统计说明</h3><ul>$notes</ul><p>未标明食物来源的记录 $unclassified 条,未计入吃麦摄入。$privacy_note</p><p><a class="source-link" href="https://www.mcdonalds.com.cn/product/Big-Mac" target="_blank" rel="noopener noreferrer">商品图片来源:麦当劳中国官网 · 巨无霸</a>。商品图仅作视觉配图,不代

skill/mcd-fit-planner/assets/recap.js

  • Executable scriptline 1
    Executable file

skill/mcd-fit-planner/references/hosts.md

  • Network accessline 19
    可直接从克隆的仓库复制 `skill/mcd-fit-planner`。在 Codex 中查看 `/skills` 或用 `$mcd-fit-planner` 明确调用;若尚未发现,重启宿主。路径与发现方式依据 [OpenAI Docs 的技能文档](https://learn.chatgpt.com/docs/build-skills)。
  • Network accessline 24
    [mcp_servers.mcd] url = "https://mcp.mcd.cn"
  • Network accessline 25
    url = "https://mcp.mcd.cn"
  • Network accessline 29
    先在自己的系统/启动环境中设置 `MCD_MCP_TOKEN`,再启动 Codex,使宿主能读取变量。这里只写环境变量名,不写真实 Token。HTTP MCP 与 `bearer_token_env_var` 的含义见 [OpenAI Docs 的 MCP 文档](https://learn.chatgpt.com/docs/extend/mcp?surface=cli)。仓库另有可复制的 `examples/codex-config.example.toml`。
  • Network accessline 35
    DeepSeek 是模型提供方。需要一个同时支持 DeepSeek 工具调用、MCP 桥接、技能文件和本地 Python 的 Agent 宿主;普通网页聊天框没有这些能力时,不能直接安装或执行本技能。[DeepSeek 官方工具调用文档](https://api-docs.deepseek.com/guides/tool_calls/)说明:模型提出调用请求,具体函数由客户端执行。
  • Network accessline 39
    [Credential-related source omitted]
  • Network accessline 40
    [Credential-related source omitted]

skill/mcd-fit-planner/references/mcp-flow.md

  • Network accessline 3
    端点 https://mcp.mcd.cn ,Streamable HTTP,通过宿主连接器保存认证信息。以服务器实时返回的 tools/list、inputSchema 和实际 response 为准,本文不假定官方 JSON 字段。不要手写未经验证的请求参数,也不要索要或打印明文 Token。
  • Network accessline 5
    官方能力来源:https://github.com/M-China/mcd-mcp-server/blob/main/README.md

skill/mcd-fit-planner/references/nutrition-report.md

  • Network accessline 20
    "nutrition": {"energy_kj": 223, "protein_g": 2, "carb_g": 7, "fat_g": 1},     "evidence": {       "url": "https://www.mcdonalds.com.cn/product/Corn-Cup/",
  • Network accessline 21
    "evidence": {       "url": "https://www.mcdonalds.com.cn/product/Corn-Cup/",       "product_name": "玉米杯", "serving": "小杯,单份", "region": "CN",
  • Network accessline 22
    "url": "https://www.mcdonalds.com.cn/product/Corn-Cup/",
  • Network accessline 50
    },     "evidence": {       "url": "https://example.invalid/format-example-only",
  • Network accessline 51
    "evidence": {       "url": "https://example.invalid/format-example-only",       "product_name": "测试饮品", "serving": "测试标准单杯", "region": "CN",
  • Network accessline 52
    "url": "https://example.invalid/format-example-only",
  • Network accessline 89
    人口参考来源:[国家卫健委标准 PDF](https://www.nhc.gov.cn/wjw/yingyang/201710/fdade20feb8144ba921b412944ffb779/files/1739783563332_90405.pdf)。成年人18–49岁轻活动示例男性2250、女性1800kcal/日;真实个体需考虑体重与活动水平。健身总能量采用用户已录入的每日计划,不用上述群体值替用户编造增肌或减脂目标。

skill/mcd-fit-planner/references/third-party-notices.md

  • Network accessline 5
    参考 [Sam-Hui-dot/mcd-budget-meal](https://github.com/Sam-Hui-dot/mcd-budget-meal/tree/25d5f345862186e9a181339118051cd4418a97e6)(2026-10-24 核查)的预算余量、超预算参考、组成差异及离线报告体验。`meal_report.py`、`assets/meal-report.html` 及推荐引擎的预算参考字段为本项目独立实现,未复制该项目代码、模板
  • Network accessline 9
    参考 [mai-suanpan](https://github.com/W313997791/mai-suanpan/tree/49cb59a87a421ed9de9a8befe16c1aedc80e41df)(2026-10-20 核查)的套餐与券比较思路、原单与推荐方案对照呈现。`fit_core.py::basket_summary` 为本项目独立实现,未复制该项目代码、提示词、图片或对话;其历史价格、单券限制和实测结论不作为本项目已验证能力。真实优惠以当前门店官方返回
  • Network accessline 13
    `assets/big-mac-official.png` 原样取自[麦当劳中国官网「巨无霸」产品页](https://www.mcdonalds.com.cn/product/Big-Mac)的透明底商品图,核查日期 2026-10-15。原图地址:<https://officiaweb-afd.mcdonalds.com.cn/public/upload/attachment/2022/08/202208081011205699.png>。仅作商品视觉配图,不代表用户实际
  • Network accessline 15
    分章节数据叙事参考[网易云音乐 2024 年度听歌报告介绍](https://socialbeta.com/campaign/23649)及[B站 2024 年度报告官方介绍](https://www.bilibili.com/opus/1012957518392983553)。页面、文案规则与排版为本项目实现,未使用这些平台的页面代码、插画或标识。
  • Network accessline 19
    `mcp_adapter.py::extract_threshold_gap` 改编自 [mcd-coupon-strategist](https://github.com/Ayzzz123/mcd-coupon-strategist/blob/e391fd00ad7322ddddd5d15d88c403c5459f0f5d/src/mcd_adapter.py) 的同名函数,提交 e391fd00ad7322ddddd5d15d88c403c5459f0f5d。

skill/mcd-fit-planner/references/workbuddy-setup.md

  • Network accessline 9
    在 https://open.mcd.cn/mcp 登录并激活自己的MCP Token。在WorkBuddy「连接器」→「自定义连接器」→「配置MCP」添加官方Streamable HTTP服务,端点 https://mcp.mcd.cn 。配置结构见仓库根目录mcp-config.example.json。
  • Access to secretsline 11
    [Credential-related source omitted]
  • Network accessline 23
    WorkBuddy技能说明:https://open.workbuddy.cn/docs/skill
  • Network accessline 24
    麦当劳官方接入说明:https://github.com/M-China/mcd-developer-innovation-challenge

skill/mcd-fit-planner/scripts/catalog_builder.py

  • Executable scriptline 1
    Executable file
  • Network accessline 93
    args = {k: copy.deepcopy(selection["parameters"][k]) for k in adapter.COUPON_SCOPE_FIELDS if k in selection["parameters"]}         args["code"] = code  # query-meal-detail uses code, not productCode.         requests.append({"request_id": c
  • Network accessline 94
    args["code"] = code  # query-meal-detail uses code, not productCode.         requests.append({"request_id": code, "tool": "query-meal-detail", "arguments": args})     return {"scope": scope(selection), "requests": requests, "reused": reused
  • Network accessline 95
    requests.append({"request_id": code, "tool": "query-meal-detail", "arguments": args})

skill/mcd-fit-planner/scripts/fit_core.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 950
    [Credential-related source omitted]

skill/mcd-fit-planner/scripts/mcp_adapter.py

  • Executable scriptline 1
    Executable file
  • Network accessline 3
    Accepts official success envelopes or their single JSON MCP text-content wrapper. Field contracts: https://open.mcd.cn/mcp/doc (checked 2026-10-14).
  • Network accessline 4
    Field contracts: https://open.mcd.cn/mcp/doc (checked 2026-10-14).
  • Network accessline 294
    blocked_candidates.append({"key": candidate["key"], "reason": str(exc)})             continue         requests.append({"key": candidate["key"], "request_id": candidate["key"], "tool": "calculate-price", "arguments": payload, "variant": "原参数
  • Network accessline 295
    continue         requests.append({"key": candidate["key"], "request_id": candidate["key"], "tool": "calculate-price", "arguments": payload, "variant": "原参数"})     if isinstance(max_per_candidate, bool) or not isinstance(max_per_candidate, i
  • Network accessline 296
    requests.append({"key": candidate["key"], "request_id": candidate["key"], "tool": "calculate-price", "arguments": payload, "variant": "原参数"})
  • Network accessline 412
    def normalize_quotes(requests, responses):     if requests.get("kind") != "official":
  • Network accessline 413
    if requests.get("kind") != "official":
  • Network accessline 435
    timestamp = datetime.strptime(response["datetime"], "%Y-%m-%d %H:%M:%S").replace(tzinfo=CN_TIME)             if not 0 <= (datetime.now(CN_TIME) - timestamp).total_seconds() <= 900 or (requests.get("day") and timestamp.date().isoformat() != 
  • Network accessline 436
    if not 0 <= (datetime.now(CN_TIME) - timestamp).total_seconds() <= 900 or (requests.get("day") and timestamp.date().isoformat() != requests["day"]):
  • Network accessline 454
    if quote["key"] not in grouped or (quote["total_cents"], quote["request_id"]) < (grouped[quote["key"]]["total_cents"], grouped[quote["key"]]["request_id"]):             grouped[quote["key"]] = quote     coupon_comparison = requests.get("cou
  • Network accessline 455
    grouped[quote["key"]] = quote     coupon_comparison = requests.get("coupon_comparison", {})     return {"kind": "official", "context_id": requests["context_id"], "store_code": requests["store_code"], "context": requests["context"], "quotes"
  • Network accessline 456
    coupon_comparison = requests.get("coupon_comparison", {})

skill/mcd-fit-planner/scripts/meal_report.py

  • Executable scriptline 1
    Executable file

skill/mcd-fit-planner/scripts/nutrition_report.py

  • Executable scriptline 1
    Executable file
  • Network accessline 13
    REFERENCE_URL = "https://www.nhc.gov.cn/wjw/yingyang/201710/fdade20feb8144ba921b412944ffb779/files/1739783563332_90405.pdf"

skill/mcd-fit-planner/scripts/nutrition_support.py

  • Executable scriptline 1
    Executable file

skill/mcd-fit-planner/scripts/period_recap.py

  • Executable scriptline 1
    Executable file

skill/mcd-fit-planner/scripts/recap_art.py

  • Executable scriptline 1
    Executable file
  • Network accessline 62
    def rule(y, color="#d7d0c4", x=56, end=1024):         add(f'<path d="M{x} {y}H{end}" stroke="{color}"/>')     add(f'<svg xmlns="http://www.w3.org/2000/svg" width="{WIDTH}" height="{HEIGHT}" viewBox="0 0 {WIDTH} {HEIGHT}" role="img" aria-lab
  • Network accessline 63
    add(f'<path d="M{x} {y}H{end}" stroke="{color}"/>')     add(f'<svg xmlns="http://www.w3.org/2000/svg" width="{WIDTH}" height="{HEIGHT}" viewBox="0 0 {WIDTH} {HEIGHT}" role="img" aria-labelledby="title desc">')     add('<title id="title">吃麦的
  • Network accessline 64
    add(f'<svg xmlns="http://www.w3.org/2000/svg" width="{WIDTH}" height="{HEIGHT}" viewBox="0 0 {WIDTH} {HEIGHT}" role="img" aria-labelledby="title desc">')

skill/mcd-fit-planner/scripts/recap_demo.py

  • Executable scriptline 1
    Executable file

skill/mcd-fit-planner/scripts/recap_render.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 91
    [Credential-related source omitted]
  • Possible obfuscationline 116
    Path(destination).write_bytes(base64.b64decode(match[1], validate=True))

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Some files could not be read; the facts below still hold.

Declared and executed: 2 facts
Signal confidence: 58 facts

and 8 more

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeCompatibleStandard SKILL.md skill/mcd-fit-planner/SKILL.md.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md skill/mcd-fit-planner/SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md skill/mcd-fit-planner/SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md skill/mcd-fit-planner/SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md skill/mcd-fit-planner/SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md skill/mcd-fit-planner/SKILL.md.opencode/skills/<skill-name>/
  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.