关于 pp-myfitnesspal
pp-myfitnesspal 是用于读取 MyFitnessPal 饮食、运动和体重记录的命令行技能,适合 Agent 和营养分析工作流。其本地 SQLite 存储支持按食物导出、日记搜索、趋势分析,并可生成精简的近期记录摘要供推理使用。
主要功能
- 01读取日记、运动、目标和测量数据
- 02按食物搜索已同步的日记条目
- 03将逐项食物日记导出为 CSV
- 04分析常见食物和热量目标连续记录
- 05通过 context 汇总近期记录
适用场景
- 01查看数周的营养趋势
- 02查找某种食物的记录日期
- 03导出日记条目进行细致分析
- 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 已安装。**如果尚未安装,请先安装:
- 使用 Printing Press 安装程序进行安装。在 macOS/Linux 上,二进制文件默认安装到
$HOME/.local/bin;在 Windows 上,默认安装到%LOCALAPPDATA%\Programs\PrintingPress\bin:npx -y @mvanhorn/printing-press-library install myfitnesspal --cli-only - 验证:
myfitnesspal-pp-cli --version - 确保报告的安装目录位于将调用此技能的 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 | 需要身份验证 |
| 5 | API 错误(上游问题) |
| 7 | 触发速率限制(等待后重试) |
| 10 | 配置错误 |
参数解析
解析 $ARGUMENTS:
- 为空、
help或--help→ 显示myfitnesspal-pp-cli --help输出 - 以
install开头 → 以mcp结尾 → 安装 MCP;否则 → 参见上文“先决条件” - 其他任何内容 → 直接使用(作为 CLI 命令执行,并附加
--agent)
MCP 服务安装
- 安装 MCP 服务:
go install github.com/mvanhorn/printing-press-library/library/other/myfitnesspal/cmd/myfitnesspal-pp-mcp@latest - 在 Claude Code 中注册:
claude mcp add myfitnesspal-pp-mcp -- myfitnesspal-pp-mcp - 验证:
claude mcp list
直接使用
- 检查是否已安装:
which myfitnesspal-pp-cli如果未找到,则提供安装选项(请参阅本技能顶部的前置条件)。 - 根据用户查询,从上方的独特功能和命令参考中选择最合适的命令。
- 使用
--agent标志执行:myfitnesspal-pp-cli <command> [subcommand] [args] --agent - 如果存在歧义,请查看子命令帮助:
myfitnesspal-pp-cli <command> --help。