MyFitnessPal MCP
MyFitnessPal MCP — данные о питании для вашего тренера по тренировкам Claude
Удалённый MCP сервер, развёрнутый на Cloudflare Workers, который открывает ваш дневник MyFitnessPal — каждый продукт с порцией и временем, итоги по приёмам пищи и за день по энергии, макро- и микронутриентам, воде, зарегистрированным тренировкам, шагам и весу — для Claude. Добавьте его один раз как пользовательский коннектор, и он будет работать в Claude в вебе, на десктопе и на мобильных устройствах. Сочетается с коннекторами Strava, Google Health и Renpho, так что ваш тренер видит тренировочную нагрузку, восстановление, композицию тела и питание.
Как он взаимодействует с MFP: У MyFitnessPal нет публичного API (партнёрская программа закрыта). Этот сервер использует собственный OAuth-процесс входа мобильного приложения и тот же API
api.myfitnesspal.com/v2, которым пользуется приложение, — тот самый, что описан в архивированной партнёрской документации на myfitnesspalapi.com. Никакого браузера, куки, скрейпинга и капчи. Авторство процесса входа: seonixx/myfitnesspal и jnelle/MyFitnesspal-API-Golang. Неофициально; MFP может изменить это в любой момент.
Инструменты
Инструмент | Что показывает |
| «Что я ел сегодня?» — итоги по приёмам пищи и за день (энергия, белок, углеводы, чистые углеводы, клетчатка, сахар, подтипы жиров, холестерин, натрий, калий, микронутриенты в % от суточной нормы), каждый продукт с порцией и временем, вода, тренировки, шаги, записи веса |
| Отдельные записи о продуктах за период, фильтруемые по приёму пищи или текстовому поиску — что было съедено вокруг тренировок, повторяющиеся продукты |
| Итоги за день за выбранный период со средними по зарегистрированным дням, мин/макс энергии, распределение энергии по белкам/углеводам/жирам, недельные средние, вода/тренировки/шаги |
| Зарегистрированные в MFP тренировки (длительность, калории, дистанция, ЧСС) и шаги за день |
| Записи веса, внесённые в MFP |
| Имя, пол, дата рождения/возраст, рост, локаль + статус токена |
| Сквозная проверка: обновление токена, профиль, какие типы/поля дневника принимает аккаунт (с сырыми примерами), измерения, возможные конечные точки целей |
| Запасной выход: вызвать любую конечную точку |
| Сбросить кэшированные дни и запомненную форму запроса, обновить токен |
| Удалить все кэшированные данные вашего аккаунта |
Устранение неполадок: если инструмент выдаёт ошибку или данные выглядят неполными, сначала запустите
run_diagnostics. Он сообщит точную комбинациюtypes/fields[], которую MFP принимает для вашего аккаунта, и сырой пример для каждого типа элементов.
Related MCP server: MyFitnessPal MCP Server
Как это работает
Claude (web/desktop/mobile)
└─ custom connector → /mcp
└─ workers-oauth-provider (this Worker IS Claude's OAuth server)
└─ AuthHandler (MFP sign-in page: one-time credential → token exchange)
└─ MyFitnessPalMCP (Durable Object) → MfpClient → api.myfitnesspal.com/v2Вход (один раз, на странице /authorize коннектора)
POST identity-api.myfitnesspal.com/oauth/token— токен client-credentials для OAuth-клиента мобильного приложения.GET identity-api…/clientKeys— ключ подписи HS512, который MFP использует для входов по паролю.POST identity-api…/oauth/authorizeсcredentials=<JWT{username, password}>— возвращает перенаправление наmfp://identity/callback?code=….POST …/oauth/token(authorization_code) — токены access, refresh и id.GET identity-api…/users/{sub}— доменный идентификатор пользователя MFP (заголовокmfp-user-id) и профиль.
Сохраняется только refresh-токен (и первый access-токен), зашифрованный в свойствах OAuth-гранта; пароль никогда не хранится. После этого Worker молча обновляет токен; последний ротированный refresh-токен хранится запечатанным в KV.
Чтение дневника
GET api.myfitnesspal.com/v2/diary?entry_date=YYYY-MM-DD&types=…&fields[]=… с заголовками Authorization: Bearer, mfp-user-id, mfp-client-id и заголовками приложения api-version/user-agent. Типы элементов: food_entry, diary_meal, exercise_entry, water, steps_aggregate. Пагинация выполняется по заголовку Link: rel=next.
Точные types/fields[], которые принимает мобильный токен, не документированы, поэтому клиент сам выясняет их: он пробует самый полный запрос, затем меньший набор полей, затем без полей, затем по одному типу за раз — и запоминает выигрышную комбинацию на день. Всё, что было отклонено, отображается в результате инструмента. Завершённые дни неизменяемы и кэшируются (запечатанными) на 30 дней; сегодняшний день всегда берётся в реальном времени. Каждый день — это один запрос к upstream, поэтому окна ограничены 92 днями.
Сопоставление полей
nutritional_contents → ключи с суффиксами единиц измерения: energy_kcal (кДж пересчитаны), protein_g, carbohydrates_g, net_carbs_g, fiber_g, sugar_g, fat_g, saturated_fat_g, monounsaturated_fat_g, polyunsaturated_fat_g, trans_fat_g, cholesterol_mg, sodium_mg, potassium_mg и calcium/iron/vitamin_a/vitamin_c/vitamin_d_pct_dv (MFP хранит их как процент от суточной нормы). Неизвестные нутриенты сохраняются в extra.
Итоги за день берутся из собственных сводок MFP diary_meal, когда они есть (totals_source: "diary_meal"), в противном случае — суммированием строк food_entry.
Кэширование и шифрование
Всё, что записывается в пространство имён KV MFP_CACHE, — токены, выясненная форма запроса, дни дневника — запечатывается AES-256-GCM ключом, полученным из SESSION_ENCRYPTION_KEY, отдельно для каждого пользователя. Без секрета кэширование отключено. Сбои кэша никогда не нарушают запрос.
Откуда берутся учётные данные клиента
Процесс входа требует OAuth-идентификатор клиента и секрет, встроенные в Android-приложение MyFitnessPal. Здесь они не воспроизводятся; упомянутый выше Go-клиент поставляет их в своём .env.sample. Задайте их как секреты Worker MFP_CLIENT_ID и MFP_CLIENT_SECRET. Если MFP их сменит, вход перестанет работать, пока они не будут обновлены.
Развёртывание
Вариант A — GitHub Actions
.github/workflows/deploy.yml запускает развёртывание при каждом push в master. Секреты живут в Cloudflare; GitHub хранит только CLOUDFLARE_API_TOKEN и CLOUDFLARE_ACCOUNT_ID.
Создайте два пространства имён KV (
MFP_OAUTH_KV,MFP_CACHE) и укажите их идентификаторы вwrangler.jsonc.Добавьте два секрета GitHub и запушьте.
В Cloudflare (Workers & Pages → myfitnesspal-mcp → Настройки → Переменные и секреты) добавьте секреты
SESSION_ENCRYPTION_KEY(любая длинная случайная строка),MFP_CLIENT_ID,MFP_CLIENT_SECRET. При желании установите переменнуюALLOWED_EMAILSна вашу MFP-почту, чтобы никто другой не мог подключиться к вашему развёртыванию.
Вариант B — локальный wrangler
npm install
npx wrangler kv namespace create MFP_OAUTH_KV # paste the id into wrangler.jsonc
npx wrangler kv namespace create MFP_CACHE # paste the id into wrangler.jsonc
npx wrangler secret put SESSION_ENCRYPTION_KEY
npx wrangler secret put MFP_CLIENT_ID
npx wrangler secret put MFP_CLIENT_SECRET
npx wrangler deployПодключение в Claude
Настройки → Коннекторы → Добавить пользовательский коннектор.
URL:
https://myfitnesspal-mcp.<subdomain>.workers.dev/mcpНажмите Подключить → войдите с помощью email/имени пользователя и пароля MyFitnessPal → готово.
Затем: «Выполни диагностику MyFitnessPal, а затем покажи мне вчерашнее питание».
Иконка коннектора
Worker указывает PUBLIC_URL/icon.png в своих MCP serverInfo.icons (и websiteUrl), поэтому клиенты, отображающие брендинг сервера, показывают его в списке коннекторов. По умолчанию это сгенерированная иконка «тарелка и столовые приборы» (npm run icon). Чтобы вместо неё использовать официальную иконку приложения MyFitnessPal, сохраните PNG из описания в App Store / Play Store и встройте его:
npm run icon:embed -- ~/Downloads/myfitnesspal-icon.png # writes src/icon.ts + assets/icon.png
npm run deploy(Официальный знак — товарный знак MyFitnessPal; он допустим для личного развёртывания, но не для распространения, поэтому его нет в этом репозитории.)
Локальная разработка
cp .dev.vars.example .dev.vars # set the secrets
npm run dev # http://localhost:8787
npm test # vitest (fake identity + API backend)
npm run typecheck
npm run iconПримечания и ограничения
Неофициально. Приватный клиент приложения используется с вашими собственными учётными данными для личного использования; MFP может сменить клиент или изменить API.
Health Connect уже синхронизирует сводки приёмов пищи MFP в Google Health; этот сервер добавляет журнал по каждому продукту с временными метками, микронутриенты, воду, тренировки MFP и вес.
У целей по нутриентам пока нет подтверждённой конечной точки —
run_diagnosticsперебирает возможные варианты, аquery_endpointпозволяет исследовать.Лимиты подзапросов. Каждый день дневника — это один запрос к upstream; на бесплатном тарифе Workers (50 подзапросов на запрос) держите некэшированные окна короткими. Кэшированные дни дёшевы.
Смена пароля делает refresh-токен недействительным — отключите и снова подключите коннектор.
Конфиденциальность
Ваш пароль обменивается на токены один раз и никогда не хранится; refresh-токен хранится зашифрованным внутри OAuth-гранта.
Данные дневника кэшируются только в вашем собственном пространстве имён KV, запечатаны и могут быть удалены с помощью
delete_my_data; ничего не отправляется третьим лицам.
Лицензия
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to read and write MyFitnessPal data, including food diary, exercises, body measurements, nutrition goals, and water intake.MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to read and log MyFitnessPal nutrition data, including tracking calories, macros, searching foods, and adding meals through natural conversation.34MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to interact with MyFitnessPal data including food diary, exercises, body measurements, nutrition goals, and water intake through natural language.2045MIT
- AlicenseNot gradedqualityAmaintenanceConnect MyFitnessPal to Claude or any MCP client. Log meals, search food database with macros, track trends, and export nutrition history against your real MyFitnessPal diary.6MIT
Related MCP Connectors
Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
Connect Claude to Fathom meeting recordings, transcripts, and summaries
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/a1dancole/myfitnesspal-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server