关于 MyFitnessPal
MyFitnessPal 是连接 MyFitnessPal 日记与 MCP 客户端的开源 MCP 服务,支持搜索食物、编辑日记、查看营养趋势和导出记录,并通过浏览器会话 Cookie 访问账户。
主要功能
- 01搜索食物及营养成分
- 02草拟并记录餐食
- 03修改或删除日记条目
- 04跟踪体重、饮水、运动和备注
- 05查看趋势并导出营养记录
适用场景
- 01选择匹配份量后记录餐食
- 02更正或删除日记条目
- 03查看不同日期的营养总量
- 04导出日记数据进行分析
MCP 相关
向 MCP 客户端提供 MyFitnessPal 日记、食物搜索、记录和分析工具。支持 stdio 与 streamable HTTP 传输。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx mfp-mcpMFP_COOKIE密钥MyFitnessPal session cookie (optional; 'mfp-mcp auth' is the guided alternative)MFP_USERNAMEMyFitnessPal username; only needed if MFP's profile lookup fails for your account本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
18收录的工具列表 · 更新于 5 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| date | any | 否 |
详细介绍
MyFitnessPal MCP 是免费的开源 MCP 服务,可将 MyFitnessPal 连接到 Claude、Cursor、VS Code 或任何 MCP 客户端。只需通过对话即可记录餐食、搜索包含宏量营养素信息的食物数据库、追踪趋势并导出营养记录,所有操作都基于你真实的 MyFitnessPal 饮食日记。
本项目已发布至 PyPI,名称为 mfp-mcp,并收录于官方 MCP 注册表,名称为 io.github.Mason-Levyy/mfp-mcp。
非官方项目。 MyFitnessPal 没有公开 API;本项目通过逆向分析其网页应用自身的接口实现。每当 MFP 更改网站时,本项目都可能失效。使用风险自负,并请使用你自己的账户。
为什么选择它?
MyFitnessPal 接入 Cloudflare 和 NextAuth 后,依赖用户名/密码登录的大多数现有集成都无法使用了。此服务:
- 使用浏览器会话 Cookie 进行身份验证,通过真实的 Chrome TLS 指纹(curl_cffi)绕过 Cloudflare
- 自动刷新会话(可选):无头浏览器配置文件会在令牌过期时轮换令牌,并自动重试失败的调用
- 不止能读取,还能写入:记录、修改和删除实际的日记条目
- 先搜索,再记录:获取包含营养素数据的候选项,然后记录确切的项目
快速开始
-
连接你的账户(一次性操作;系统会提示你粘贴 Cookie——请参阅 身份验证):
uvx mfp-mcp auth -
将服务添加到你的客户端。顶部的安装按钮可一键完成 Cursor 和 VS Code 的配置。
Claude Code
claude mcp add myfitnesspal -- uvx mfp-mcp或将其作为插件安装:
/plugin install myfitnesspal-mcp --marketplace Mason-Levyy/myfitnesspal-mcpClaude Desktop(
claude_desktop_config.json)、Cursor (~/.cursor/mcp.json)、Windsurf(~/.codeium/windsurf/mcp_config.json)、 和 Cline(cline_mcp_settings.json)都使用相同的配置项:{ "mcpServers": { "myfitnesspal": { "command": "uvx", "args": ["mfp-mcp"] } } }VS Code、Codex CLI、Gemini CLI
VS Code(也可使用上方的按钮):
code --add-mcp '{"name":"myfitnesspal","command":"uvx","args":["mfp-mcp"]}'Codex CLI:
codex mcp add myfitnesspal -- uvx mfp-mcpGemini CLI:
gemini mcp add myfitnesspal uvx mfp-mcp -
向它发出请求:“把一根香蕉记作零食”、“我昨天吃了什么?”、 “绘制我本月的体重图表”。
需要安装 uv。任何支持 stdio 或 streamable HTTP 的 MCP 客户端都可使用,不限于 Claude。
觉得有用? 在 GitHub 上点个 ⭐, 能帮助其他 MyFitnessPal 用户找到它。
身份验证
此服务使用浏览器中的 MyFitnessPal 会话 Cookie 登录:
- 在 myfitnesspal.com 登录
- 打开开发者工具(F12)→ Application(Chrome)或 Storage(Firefox)→
Cookies →
https://www.myfitnesspal.com - 复制
__Secure-next-auth.session-token的值 - 将其粘贴到
mfp-mcp auth提示中;或者在 macOS 上运行mfp-mcp auth --clipboard并复制 Cookie:令牌进入剪贴板后便会自动连接
会话有效期为最后一次续期后的 30 天。服务每次创建客户端时都会续期会话,
并保存 MyFitnessPal 重新签发的 Cookie,因此只要每月至少使用一次,
保存的会话就会保持最新。mfp-mcp auth --check 会报告保存的会话是否仍然有效,
以及是否已设置自动刷新;它会在检查时续期并保存会话。如果会话需要处理,
命令会以状态码 1 退出。因此,按计划运行此命令(使用 cron、launchd)
可以保持闲置会话有效,并在会话失效前发出警告。
自动刷新(推荐)
使用 autorefresh extra 时,auth 还会初始化一个持久的无头浏览器配置文件。
当 MyFitnessPal 在调用过程中拒绝会话时,服务会告知客户端正在重试,
随后以无头模式启动该配置文件,让 MyFitnessPal 轮换会话令牌、保存新的 Cookie,
并重试调用。
uvx --from 'mfp-mcp[autorefresh]' playwright install chromium
uvx --from 'mfp-mcp[autorefresh]' mfp-mcp auth
然后在客户端配置中使用相同的 --from 'mfp-mcp[autorefresh]' 格式
(例如 uvx --from 'mfp-mcp[autorefresh]' mfp-mcp)。
工具
| 工具 | 功能 |
|---|---|
fitness_get_day | 获取某一天的营养总量、饮食日记条目、MFP 每日备注和感受备注 |
fitness_search_food | 返回候选匹配项及其品牌、热量、宏量营养素、份量和 ID |
fitness_draft_food | 返回带编号的选项及每种份量,并根据可选的热量和宏量营养素目标筛选或排序 |
fitness_log_food | 将草稿选项(及份量)、已记住的食物或确切 ID 记录到实际饮食日记 |
fitness_list_food_pins | 已记住的查询 → 食物/份量选项(本地) |
fitness_clear_food_pin | 忘记一项已记住的选项,或清除所有选项 |
fitness_delete_food | 根据名称匹配移除一条饮食日记条目 |
fitness_modify_food | 替换一条条目(或更改其数量),替换项的选择方式与 fitness_log_food 相同 |
fitness_log_weight | 记录体重测量值(再次记录时会更新同一天的记录) |
fitness_log_water | 添加饮水量(杯、fl oz、mL、L),或使用 replace 设置当天总量 |
fitness_get_exercise | 查看运动日记(有氧运动 + 力量训练) |
fitness_get_exercise_entries | 列出有氧运动和力量训练条目,并显示各部分的列 |
fitness_delete_exercise | 根据名称匹配移除一条运动记录(多行同步清理时使用 all_matches) |
fitness_get_note | 查看某一天的 MyFitnessPal 每日日记备注(“Notes”框) |
fitness_log_note | 将每日备注写入 MFP(替换现有内容,或使用 append 添加新行) |
fitness_log_feel | 保存主观的“感受如何”备注(存储在本地,不会发送到 MFP) |
fitness_get_trends | 获取日期范围内的一项指标:体重、摄入热量、蛋白质、碳水化合物、脂肪 |
fitness_bulk_export | 一次调用导出整个日期范围的数据,以供分析 |
日志记录流程
饮食日志采用先草稿、后确认的方式,因此最终记录到日记中的内容绝不会受 MyFitnessPal 搜索顺序影响:
fitness_draft_food("greek yogurt", min_protein=15, max_calories=150)会返回编号选项。每个选项都会列出所有份量大小,以及整条记录(份量 × 数量)的卡路里和宏量营养素,并提供建议份量; 符合目标的选项排在前面,接近目标的选项排在后面。使用不同目标再次调用即可进一步筛选。fitness_log_food(draft_id=..., option=2, serving=1)会准确记录该食物及份量,并记住此查询的选择。- 下次调用
fitness_log_food(query="greek yogurt")时,会记录记住的食物及份量,无需搜索。
如果没有记住任何选择,直接调用 fitness_log_food(query=...) 时,只有在结果中恰好有一项名称完全匹配的情况下才会记录;否则不会记录任何内容,并会返回一个供你选择的草稿。记住的选择保存在本地缓存中(fitness_list_food_pins、fitness_clear_food_pin)。草稿会在 24 小时后过期。
fitness_modify_food 会在删除任何内容之前,以相同方式选择替换项:如果有记住的食物,或只有一项名称完全匹配的结果,就会直接使用;否则会保留原条目并返回草稿——再次调用 fitness_modify_food,并传入相同的 query 以及 draft_id 和 option。
fitness_log_food、fitness_delete_food 和 fitness_modify_food 都以相同方式接受 meal 参数:可以传入 breakfast/lunch/dinner/snacks,也可以传入日记中当前任意餐次分区的字面名称——包括重命名后的默认餐次,或 MyFitnessPal 允许你在日记设置中添加的最多两个额外餐次。匹配时不区分大小写,并与账户当前的餐次标签进行比对。如果你重命名了默认餐次,这些关键词仍然有效:breakfast/lunch/dinner/snacks 会分别对应第一至第四个餐次,除非该位置现在使用了不同的默认名称(例如,lunch 不会被记录到你重命名为“Dinner”的第二个餐次中)。任何其他无法识别的 meal 都会引发错误,而不会悄悄记录到错误的分区中。
每日摘要和趋势从本地 SQLite 缓存读取数据,并在数据有缺口时从 MyFitnessPal 补齐(全新安装后的首次调用最多获取 30 天的数据,每天发送一个请求)。
记录饮水量时,会从 /food/water 读取当天当前的总量,加上请求的数量,再将新总量发回同一端点。传入 replace=True 可直接设置当天的总量(例如修正错误记录的数量);每次调用都会返回 previous_ml,因此如果出错,可以将其作为 amount 传入,并设置 unit="ml" 和 replace=True 来撤销。单独发送的 /stats 请求及其 water_logged 事件属于分析遥测数据,不会持久化饮水总量。
远程 / HTTP 模式
默认传输方式为 stdio。对于网络客户端:
mfp-mcp --http --host 127.0.0.1 --port 8484
这会在 /mcp 提供可流式 HTTP。**此服务没有内置身份验证——切勿将其暴露到互联网。**请绑定到 localhost,并通过能够为你进行身份验证的方式提供访问:VPN/tailnet(例如 tailscale serve)、经过身份验证的反向代理,或支持 OAuth 的 MCP 网关。
配置
| 变量 | 用途 | 默认值 |
|---|---|---|
MFP_COOKIE | 会话 Cookie(完整标头或纯令牌);优先于已保存的文件 | – |
MFP_USERNAME | 你的 MFP 用户名(不是电子邮件);仅在个人资料查找失败时需要 | 自动检测 |
MFP_IMPERSONATE | curl_cffi 浏览器指纹(遇到 403 时可尝试 chrome124) | chrome |
MFP_SYNC_DAYS | 补齐数据时回溯的天数 | 30 |
MFP_MCP_DATA_DIR | SQLite 缓存和浏览器配置文件的存放位置 | 平台数据目录 |
故障排查
- 403 / Cloudflare 拦截:尝试设置
MFP_IMPERSONATE=chrome124(或其他 curl_cffi 支持的目标浏览器)。 数据中心 IP 遭遇质询的概率远高于住宅 IP。 - “会话已过期”:运行
mfp-mcp auth --check确认,然后重新运行mfp-mcp auth,或设置自动刷新。 - “无法读取你的 MyFitnessPal 个人资料”:部分账户的 MFP 个人资料端点会返回 500。
请将
MFP_USERNAME设置为你的用户名(而非电子邮件地址)。 - 安装 curl_cffi 遇到问题:预构建 wheel 支持 Linux/macOS/Windows; musl(Alpine)则需要从源代码构建。
常见问题
如何将 MyFitnessPal 连接到 Claude? 运行一次 uvx mfp-mcp auth 以
保存 MyFitnessPal 会话,然后添加服务:在 Claude Code 中运行 claude mcp add myfitnesspal -- uvx mfp-mcp,或在 Claude Desktop 中添加
快速入门里的 JSON 条目。然后让 Claude 记录一餐或
显示昨天的饮食日记。
它免费吗? 是的。它采用 MIT 许可证开源,不会出售或收集任何信息。
MyFitnessPal 有官方 API 吗? 没有可供你使用的。MyFitnessPal 的 API 仅限获批合作伙伴使用,且不接受新的应用程序,因此你无法申请 API 密钥。 此服务使用你自己的浏览器会话 Cookie 登录,并发出与 MyFitnessPal 网站相同的请求(参见 工作原理)。
它支持哪些 MCP 客户端? 任何可运行 stdio 或
可流式传输 HTTP 服务的客户端都支持,包括 Claude Desktop、Claude Code、Cursor、Windsurf、
Cline 和 VS Code。使用快速入门中的
uvx mfp-mcp 命令。AI 编码 Agent 可参考
llms-install.md。
除了读取餐食记录,它也能记录餐食吗? 可以。它可以记录、替换和删除 饮食日记条目,记录体重和饮水量,并写入每日备注。请参阅 工具。
我的数据会发送到哪里? 服务只与 MyFitnessPal 通信。会话 Cookie 保存在本地配置目录中,每日摘要、感受备注 和记忆的食物保存在本地 SQLite 文件中。工具结果会发送到你连接的 MCP 客户端和模型。
工作原理
- python-myfitnesspal
用于解析饮食日记、测量数据和运动页面——它通过
curl_cffi会话运行,模拟 Chrome 的 TLS 指纹,让 Cloudflare 仅凭 NextAuth 会话 Cookie 就允许其通过。 - 写入操作会复现 Web 应用自身的 XHR 调用:旧版食物搜索页面会提供
/food/add接受的food_id/weight_id,删除操作通过/food/remove执行, 饮水量通过/food/water读取和写入,每日备注通过/food/note读取和写入—— 每项操作都会附带页面 CSRF 令牌。 - 每日摘要、趋势和导出数据从本地 SQLite 缓存读取,缓存会补齐缺失的日期。MyFitnessPal 每日备注会双向同步;感受备注仅保存在本地。
开发
git clone https://github.com/Mason-Levyy/myfitnesspal-mcp
cd myfitnesspal-mcp
uv sync --extra autorefresh
uv run pytest
测试使用合成的 MyFitnessPal HTML/JSON 测试样例运行——无需账户。
Lint 和格式检查通过 ruff 执行(uv run ruff check .、
uv run ruff format .)。
贡献
欢迎提交问题和拉取请求,尤其是 MyFitnessPal 更改内容时提供端点抓取结果。有关 环境设置、风格规范和 PR 检查清单,请参阅 CONTRIBUTING.md;有关如何私下 报告漏洞,请参阅 SECURITY.md。发布历史见 CHANGELOG.md。
支持项目
如果此服务为你节省了时间,请 为仓库点星。星标 能帮助其他 MyFitnessPal 用户在 GitHub 搜索和 MCP 目录中找到它。也欢迎提交错误 报告和端点抓取结果,地址是 issues。
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。