mcpField
M
MyFitnessPal

MyFitnessPal

本地服务
github.com/Mason-Levyy健康医疗27今天更新

关于 MyFitnessPal

MyFitnessPal 是连接 MyFitnessPal 日记与 MCP 客户端的开源 MCP 服务,支持搜索食物、编辑日记、查看营养趋势和导出记录,并通过浏览器会话 Cookie 访问账户。

主要功能

  1. 01搜索食物及营养成分
  2. 02草拟并记录餐食
  3. 03修改或删除日记条目
  4. 04跟踪体重、饮水、运动和备注
  5. 05查看趋势并导出营养记录

适用场景

  1. 01选择匹配份量后记录餐食
  2. 02更正或删除日记条目
  3. 03查看不同日期的营养总量
  4. 04导出日记数据进行分析

MCP 相关

向 MCP 客户端提供 MyFitnessPal 日记、食物搜索、记录和分析工具。支持 stdio 与 streamable HTTP 传输。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"mason-levyy-mfp": {
"command": "uvx",
"args": [
"mfp-mcp"
],
"env": {
"MFP_COOKIE": "<MFP_COOKIE>",
"MFP_USERNAME": "<MFP_USERNAME>"
}
}
}
}
启动命令uvx mfp-mcp
需要配置的环境变量
MFP_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+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypimfp-mcp0.4.3

工具

18

收录的工具列表 · 更新于 5 天前

参数类型必填说明
dateany否

详细介绍

myfitnesspal-mcp

只需与 AI 对话,即可记录 MyFitnessPal。

Mason-Levyy/myfitnesspal-mcp MCP server PyPI GitHub stars CI Python License: MIT

Install in Cursor Install in VS Code Install in VS Code Insiders

快速入门 · 工具 · 身份验证 · 更新日志

演示:Claude 使用 fitness_log_food 记录早餐奶昔中的每种食材,记录随后出现在 MyFitnessPal 饮食日记中

▶ 观看发布视频

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
  • 自动刷新会话(可选):无头浏览器配置文件会在令牌过期时轮换令牌,并自动重试失败的调用
  • 不止能读取,还能写入:记录、修改和删除实际的日记条目
  • 先搜索,再记录:获取包含营养素数据的候选项,然后记录确切的项目

快速开始

  1. 连接你的账户(一次性操作;系统会提示你粘贴 Cookie——请参阅 身份验证):

    uvx mfp-mcp auth
    
  2. 将服务添加到你的客户端。顶部的安装按钮可一键完成 Cursor 和 VS Code 的配置。

    Claude Code

    claude mcp add myfitnesspal -- uvx mfp-mcp
    

    或将其作为插件安装:

    /plugin install myfitnesspal-mcp --marketplace Mason-Levyy/myfitnesspal-mcp
    

    Claude 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-mcp
    

    Gemini CLI:

    gemini mcp add myfitnesspal uvx mfp-mcp
    
  3. 向它发出请求:“把一根香蕉记作零食”、“我昨天吃了什么?”、 “绘制我本月的体重图表”。

需要安装 uv。任何支持 stdio 或 streamable HTTP 的 MCP 客户端都可使用,不限于 Claude。

觉得有用? 在 GitHub 上点个 ⭐, 能帮助其他 MyFitnessPal 用户找到它。

身份验证

此服务使用浏览器中的 MyFitnessPal 会话 Cookie 登录:

  1. 在 myfitnesspal.com 登录
  2. 打开开发者工具(F12)→ Application(Chrome)或 Storage(Firefox)→ Cookies → https://www.myfitnesspal.com
  3. 复制 __Secure-next-auth.session-token 的值
  4. 将其粘贴到 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 搜索顺序影响:

  1. fitness_draft_food("greek yogurt", min_protein=15, max_calories=150) 会返回编号选项。每个选项都会列出所有份量大小,以及整条记录(份量 × 数量)的卡路里和宏量营养素,并提供建议份量; 符合目标的选项排在前面,接近目标的选项排在后面。使用不同目标再次调用即可进一步筛选。
  2. fitness_log_food(draft_id=..., option=2, serving=1) 会准确记录该食物及份量,并记住此查询的选择。
  3. 下次调用 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_IMPERSONATEcurl_cffi 浏览器指纹(遇到 403 时可尝试 chrome124)chrome
MFP_SYNC_DAYS补齐数据时回溯的天数30
MFP_MCP_DATA_DIRSQLite 缓存和浏览器配置文件的存放位置平台数据目录

故障排查

  • 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。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。