Skip to main content
Glama
a1dancole

MyFitnessPal MCP

by a1dancole

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 может изменить это в любой момент.

Инструменты

Инструмент

Что показывает

get_daily_nutrition

«Что я ел сегодня?» — итоги по приёмам пищи и за день (энергия, белок, углеводы, чистые углеводы, клетчатка, сахар, подтипы жиров, холестерин, натрий, калий, микронутриенты в % от суточной нормы), каждый продукт с порцией и временем, вода, тренировки, шаги, записи веса

get_food_log

Отдельные записи о продуктах за период, фильтруемые по приёму пищи или текстовому поиску — что было съедено вокруг тренировок, повторяющиеся продукты

get_nutrition_trend

Итоги за день за выбранный период со средними по зарегистрированным дням, мин/макс энергии, распределение энергии по белкам/углеводам/жирам, недельные средние, вода/тренировки/шаги

get_exercise_log

Зарегистрированные в MFP тренировки (длительность, калории, дистанция, ЧСС) и шаги за день

get_weight_log

Записи веса, внесённые в MFP

get_profile

Имя, пол, дата рождения/возраст, рост, локаль + статус токена

run_diagnostics

Сквозная проверка: обновление токена, профиль, какие типы/поля дневника принимает аккаунт (с сырыми примерами), измерения, возможные конечные точки целей

query_endpoint

Запасной выход: вызвать любую конечную точку api.myfitnesspal.com или identity-эндпоинт с применением авторизации коннектора

refresh_data

Сбросить кэшированные дни и запомненную форму запроса, обновить токен

delete_my_data

Удалить все кэшированные данные вашего аккаунта

Устранение неполадок: если инструмент выдаёт ошибку или данные выглядят неполными, сначала запустите 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 коннектора)

  1. POST identity-api.myfitnesspal.com/oauth/token — токен client-credentials для OAuth-клиента мобильного приложения.

  2. GET identity-api…/clientKeys — ключ подписи HS512, который MFP использует для входов по паролю.

  3. POST identity-api…/oauth/authorize с credentials=<JWT{username, password}> — возвращает перенаправление на mfp://identity/callback?code=….

  4. POST …/oauth/token (authorization_code) — токены access, refresh и id.

  5. 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.

  1. Создайте два пространства имён KV (MFP_OAUTH_KV, MFP_CACHE) и укажите их идентификаторы в wrangler.jsonc.

  2. Добавьте два секрета GitHub и запушьте.

  3. В 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

  1. Настройки → Коннекторы → Добавить пользовательский коннектор.

  2. URL: https://myfitnesspal-mcp.<subdomain>.workers.dev/mcp

  3. Нажмите Подключить → войдите с помощью email/имени пользователя и пароля MyFitnessPal → готово.

Затем: «Выполни диагностику MyFitnessPal, а затем покажи мне вчерашнее питание».

Иконка коннектора

Worker указывает PUBLIC_URL/icon.png в своих MCP serverInfo.iconswebsiteUrl), поэтому клиенты, отображающие брендинг сервера, показывают его в списке коннекторов. По умолчанию это сгенерированная иконка «тарелка и столовые приборы» (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

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all related MCP servers

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

View all MCP Connectors

Latest Blog Posts

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