mcpField
P
pp-myfitnesspal

pp-myfitnesspal

github.com/mvanhorn其他2.1k65 次安装今天更新
代码仓库

关于 pp-myfitnesspal

pp-myfitnesspal 是用于读取 MyFitnessPal 饮食、运动和体重记录的命令行技能,适合 Agent 和营养分析工作流。其本地 SQLite 存储支持按食物导出、日记搜索、趋势分析,并可生成精简的近期记录摘要供推理使用。

主要功能

  1. 01读取日记、运动、目标和测量数据
  2. 02按食物搜索已同步的日记条目
  3. 03将逐项食物日记导出为 CSV
  4. 04分析常见食物和热量目标连续记录
  5. 05通过 context 汇总近期记录

适用场景

  1. 01查看数周的营养趋势
  2. 02查找某种食物的记录日期
  3. 03导出日记条目进行细致分析
  4. 04为营养指导准备记录摘要

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mvanhorn/printing-press-library --skill pp-myfitnesspal

安装后在 Claude Code 中输入/pp-myfitnesspal确认已加载。

详细介绍

MyFitnessPal — Printing Press CLI

前提条件:安装 CLI

此技能使用 myfitnesspal-pp-cli 二进制文件。**调用此技能中的任何命令之前,都必须确认 CLI 已安装。**如果尚未安装,请先安装:

  1. 使用 Printing Press 安装程序进行安装。在 macOS/Linux 上,二进制文件默认安装到 $HOME/.local/bin;在 Windows 上,默认安装到 %LOCALAPPDATA%\Programs\PrintingPress\bin:
    npx -y @mvanhorn/printing-press-library install myfitnesspal --cli-only
    
  2. 验证:myfitnesspal-pp-cli --version
  3. 确保报告的安装目录位于将调用此技能的 Agent/运行时的 $PATH 中。

如果 npx 安装失败(没有 Node、离线等),请改用直接通过 Go 安装的方式(需要 Go 1.26.6 或更高版本):

go install github.com/mvanhorn/printing-press-library/library/productivity/myfitnesspal/cmd/myfitnesspal-pp-cli@latest

如果安装后 --version 报告“command not found”,则运行时无法在 $PATH 中找到二进制文件目录。验证成功之前,请勿执行此技能的命令。

何时使用此 CLI

当 Agent 需要分析用户的实际饮食、运动或体重历史记录时,尤其是需要查看今天以外时间段的数据时,请使用此 CLI。本地 SQLite 存储加上面向 Agent 的 context 命令,只需一次工具调用,就能替代在聊天中来回复制粘贴昨天饮食记录的过程。可用于营养指导、热量缺口校准、宏量营养素分析、回溯查询(“我每次记录 X 的时候”),以及官方 MFP UI 按餐汇总导致无法回答问题的任何场景。

独特功能

这些功能在此 API 的其他工具中均不可用。

可累积的本地状态
  • export csv — 将饮食记录导出为 CSV,每种记录的食物占一行,而不是每餐占一行。MFP Premium 仅提供按餐汇总的 CSV。

    当 Agent 需要以食物为粒度获取用户完整的饮食历史记录,用于分析、训练或长期指导记忆时,请使用此功能。

    myfitnesspal-pp-cli export csv --from 2026-01-01 --to 2026-05-08 --out diary.csv
    
  • analytics top-foods — 帕累托查询:在某个时间段内,哪些 N 种食物贡献了 X% 的蛋白质/碳水化合物/脂肪/纤维/糖/卡路里?

    当 Agent 帮助用户了解究竟是什么在影响宏量营养素目标,而不是用户以为的因素时,请使用此功能。

    myfitnesspal-pp-cli analytics top-foods --nutrient protein --days 60 --cumulative-percent 80 --json
    
  • find — 在本地存储中对所有饮食记录和食物进行全文搜索。每个匹配项都会返回日期、餐次、份数和卡路里。

    当 Agent 需要找出用户记录某种特定食物的所有时间,而不必翻阅数月的饮食记录时,请使用此功能。

    myfitnesspal-pp-cli find --food "Chipotle Bowl" --from 2026-01-01 --json
    
  • analytics streak — 计算连续天数最长的区间,在此期间每日总卡路里均处于目标值的 ±tolerance 范围内。

    当用户询问依从性趋势时,可使用此功能,无需主观解读即可得到答案。

    myfitnesspal-pp-cli analytics streak --days 60 --tolerance 0.05 --json
    
面向 Agent 的底层支持
  • context — 一次调用即可获取最近 N 天的快照:饮食记录汇总、体重趋势、当前目标、近期食物和宏量营养素差值;针对 Agent 上下文窗口进行了优化。

    任何 Agent 在分析用户营养情况前都应首先调用此命令,一次即可了解全貌。

    myfitnesspal-pp-cli context --days 14 --json
    

命令参考

api-user — v2 API 中经过身份验证的用户记录(偏好设置、付费订阅、个人资料)。

  • myfitnesspal-pp-cli api-user — 获取 v2 用户记录(单位、目标偏好、付费订阅、个人资料)。

diary — 每日饮食日记(按餐记录,包含完整营养成分面板)。

  • myfitnesspal-pp-cli diary get-day — 获取某一天的饮食日记,格式为抓取的 HTML(python-myfitnesspal 使用的旧版接口)。
  • myfitnesspal-pp-cli diary load-recent — 加载一餐的近期食物快速选择列表。

exercise — 某一天记录的有氧和力量训练。

  • myfitnesspal-pp-cli exercise — 获取某一天的运动记录(有氧 + 力量训练),格式为抓取的 HTML。

food — 搜索公共食物数据库、查看食物详情、记录自定义食物。

  • myfitnesspal-pp-cli food details — 根据 MFP 食物 ID 获取单种食物的完整营养成分面板。
  • myfitnesspal-pp-cli food search — 搜索食物数据库。
  • myfitnesspal-pp-cli food suggested-servings — 获取某种食物的常见份量建议(为“1 cup / 100g / medium”选择器提供支持)。

goals — 每日卡路里 / 宏量营养素 / 饮水 / 体重目标。

  • myfitnesspal-pp-cli goals — 获取当前每日目标(卡路里目标、宏量营养素比例、饮水目标),格式为抓取的 HTML。

measurement — 体重、体脂和其他身体测量数据(时间序列)。

  • myfitnesspal-pp-cli measurement get-range — 获取某种测量类型在指定日期范围内的数值,格式为抓取的 HTML。
  • myfitnesspal-pp-cli measurement types — 列出为你的账户定义的测量类型(Weight、BodyFat、Neck、Waist、Hips,以及自定义类型)。

note — 附加到某天饮食或运动日记的自由文本备注。

  • myfitnesspal-pp-cli note — 获取某一天的饮食备注。

reports — 汇总时间序列报告(任意营养素或体重,格式为日期->数值序列)。

  • myfitnesspal-pp-cli reports — 获取时间序列报告(例如,nutrition/Net%20Calories/30 会返回最近 30 天的净卡路里数据)。

user — 经过身份验证的用户账户信息、单位和偏好设置。

  • myfitnesspal-pp-cli user auth-token — 根据会话 Cookie 获取 v2 bearer token。
  • myfitnesspal-pp-cli user top-foods-server — 获取你在某个日期范围内记录最多的食物,由服务端计算(为“你最常吃的”洞察提供支持)。

water — 每日饮水量跟踪。

  • myfitnesspal-pp-cli water — 获取某一天的饮水量。
查找合适的命令

知道想做什么,但不知道该用哪个命令时,可以直接向 CLI 提问:

myfitnesspal-pp-cli which "<capability in your own words>"

which 会根据自然语言功能查询,从此 CLI 精选的功能索引中匹配最合适的命令。退出代码 0 表示至少有一个匹配项;退出代码 2 表示没有可信的匹配项 — 请改用 --help,或使用更具体的查询。

操作示例

为营养指导问题构建 Agent 上下文
myfitnesspal-pp-cli context --days 30 --json --select diary_totals,weight_trend,goals

一次工具调用即可提供 Agent 回答“我这周是否应该进一步减脂?”所需的全部信息,无需来回粘贴。

查找每次记录某种食物的时间
myfitnesspal-pp-cli find --food "Greek yogurt" --from 2026-01-01 --json --select date,meal,servings,calories

在同步的日记上运行本地 FTS;可即时回答回忆类问题,而 MFP 网页界面需要滚动查找。

按季度导出每种食物的 CSV
myfitnesspal-pp-cli export csv --from 2026-01-01 --to 2026-03-31 --out q1-2026.csv

每条食物记录占一行,包含完整营养成分 — 这是 MFP 付费版不会提供的导出功能。

找出影响某项宏量营养素摄入的主要食物
myfitnesspal-pp-cli analytics top-foods --nutrient protein --days 60 --cumulative-percent 0.8 --json

对本地日记执行帕累托查询:过去 60 天里,哪些食物贡献了大部分蛋白质。

依从目标的连续天数
myfitnesspal-pp-cli analytics streak --days 60 --tolerance 0.05 --json

卡路里摄入连续处于目标 ±5% 范围内的最长天数。目标值读取自最近同步到本地存储的 goal_snapshot;传入 --goal-calories <value> 可覆盖该值。

身份验证设置

MyFitnessPal 已关闭其公共 API。此 CLI 使用你在浏览器中的登录会话——在 Chrome 中登录 myfitnesspal.com,然后运行 myfitnesspal-pp-cli auth login --chrome。Cookie 从 .myfitnesspal.com 域名读取。会话通常持续 7-30 天;会话过期后,在 Chrome 中重新登录并再次运行 auth login --chrome。

运行 myfitnesspal-pp-cli doctor 验证设置。

Agent 模式

在任何命令中添加 --agent。它会展开为:--json --compact --no-input --no-color --yes。

  • 可通过管道传输 — JSON 输出到 stdout,错误输出到 stderr

  • 可筛选 — --select 保留部分字段。点分路径可深入嵌套结构;数组会逐元素遍历。对于内容冗长的 API,这对控制上下文大小至关重要:

    myfitnesspal-pp-cli api-user --user-id 550e8400-e29b-41d4-a716-446655440000 --agent --select id,name,status
    
  • 可预览 — --dry-run 显示请求,但不发送

  • 支持离线使用 — 有本地 SQLite 存储时,同步/搜索命令可以使用该存储

  • 非交互式 — 从不显示提示,每个输入都通过标志指定

  • 显式重试 — 仅当已存在的创建结果也应视为成功时,才使用 --idempotent

响应封装

从本地存储或 API 读取数据的命令会将输出封装在来源信息中:

{
  "meta": {"source": "live" | "local", "synced_at": "...", "reason": "..."},
  "results": <data>
}

解析 .results 获取数据,并查看 .meta.source 判断数据来自实时请求还是本地存储。只有当 stdout 连接到终端时,才会将易读的 N results (live) 摘要输出到 stderr — 通过管道传输或供 Agent 使用时,stdout 仅输出纯 JSON。

Agent 反馈

当你(或 Agent)发现此 CLI 有不妥之处时,请记录下来:

myfitnesspal-pp-cli feedback "the --since flag is inclusive but docs say exclusive"
myfitnesspal-pp-cli feedback --stdin < notes.txt
myfitnesspal-pp-cli feedback list --json --limit 10

条目会本地存储在 ~/.myfitnesspal-pp-cli/feedback.jsonl。除非设置了 MYFITNESSPAL_FEEDBACK_ENDPOINT,并且传入了 --send 或设置了 MYFITNESSPAL_FEEDBACK_AUTO_SEND=true,否则不会发送 POST 请求。默认行为仅在本地存储。

记录让你感到意外的地方,而不是提交错误报告。简短、具体、一行即可:这才是会不断积累的部分。

输出传递

每个命令都接受 --deliver <sink>。除了输出到 stdout 外(或替代 stdout),输出还会发送到指定的接收端,因此 Agent 无需手动通过管道即可传递命令结果。支持三种接收端:

接收端效果
stdout默认;仅输出到 stdout
file:<path>以原子方式将输出写入 <path>(临时文件 + 重命名)
webhook:<url>将输出正文 POST 到该 URL(使用 --compact 时为 application/json 或 application/x-ndjson)

对于未知的方案,会拒绝请求并返回结构化错误,指出支持的方案。Webhook 请求失败时会返回非零状态码,并将 URL 和 HTTP 状态记录到 stderr。

命名配置

配置文件是一组已保存的标志值,可在多次调用中重复使用。当计划任务中的 Agent 每次运行都以相同配置调用同一命令时,可以使用配置文件 — 这就是 HeyGen 的“Beacon”模式。

myfitnesspal-pp-cli profile save briefing --json
myfitnesspal-pp-cli --profile briefing api-user --user-id 550e8400-e29b-41d4-a716-446655440000
myfitnesspal-pp-cli profile list --json
myfitnesspal-pp-cli profile show briefing
myfitnesspal-pp-cli profile delete briefing --yes

显式标志的优先级高于配置文件中的值;配置文件中的值优先级高于默认值。agent-context 会在 available_profiles 下列出所有可用配置文件,以便 Agent 在运行时发现它们。

退出代码

代码含义
0成功
2用法错误(参数错误)
3未找到资源
4需要身份验证
5API 错误(上游问题)
7触发速率限制(等待后重试)
10配置错误

参数解析

解析 $ARGUMENTS:

  1. 为空、help 或 --help → 显示 myfitnesspal-pp-cli --help 输出
  2. 以 install 开头 → 以 mcp 结尾 → 安装 MCP;否则 → 参见上文“先决条件”
  3. 其他任何内容 → 直接使用(作为 CLI 命令执行,并附加 --agent)

MCP 服务安装

  1. 安装 MCP 服务:
    go install github.com/mvanhorn/printing-press-library/library/other/myfitnesspal/cmd/myfitnesspal-pp-mcp@latest
    
  2. 在 Claude Code 中注册:
    claude mcp add myfitnesspal-pp-mcp -- myfitnesspal-pp-mcp
    
  3. 验证:claude mcp list

直接使用

  1. 检查是否已安装:which myfitnesspal-pp-cli 如果未找到,则提供安装选项(请参阅本技能顶部的前置条件)。
  2. 根据用户查询,从上方的独特功能和命令参考中选择最合适的命令。
  3. 使用 --agent 标志执行:
    myfitnesspal-pp-cli <command> [subcommand] [args] --agent
    
  4. 如果存在歧义,请查看子命令帮助:myfitnesspal-pp-cli <command> --help。

评论

支持 Markdown