Skip to main content
Glama
a1dancole

MyFitnessPal MCP

by a1dancole

MyFitnessPal MCP — datos de nutrición para tu entrenador de Claude

Un servidor remoto MCP, desplegado en Cloudflare Workers, que expone tu diario de MyFitnessPal — cada alimento con su porción y hora, totales por comida y diarios de energía, macros y micros, agua, ejercicio registrado, pasos y peso — a Claude. Añádelo una vez como conector personalizado y funciona en Claude web, de escritorio y móvil. Se integra con los conectores de Strava, Google Health y Renpho para que tu entrenador vea la carga de entrenamiento, la recuperación, la composición corporal y el combustible.

Cómo se comunica con MFP: MyFitnessPal no tiene API pública (el programa de socios está cerrado). Este servidor usa el flujo de identidad OAuth propio de la aplicación móvil y la misma API api.myfitnesspal.com/v2 que usa la app — la que describen los documentos de socios archivados en myfitnesspalapi.com. Sin navegador, sin cookies, sin scraping, sin captcha. Crédito por el flujo de identidad: seonixx/myfitnesspal y jnelle/MyFitnesspal-API-Golang. No oficial; MFP puede cambiarlo en cualquier momento.

Tools

Herramienta

Qué responde

get_daily_nutrition

«¿Qué comí hoy?» — totales por comida y del día (energía, proteínas, carbohidratos, carbohidratos netos, fibra, azúcar, subtipos de grasa, colesterol, sodio, potasio, micros %VD), cada alimento con su porción y marca de tiempo, agua, ejercicio, pasos, registros de peso

get_food_log

Entradas de alimentos individuales en un rango, filtrables por comida o por búsqueda de texto — qué se comió alrededor de las sesiones, alimentos recurrentes

get_nutrition_trend

Totales diarios en un periodo con medias de los días registrados, energía mín/máx, desglose energético de proteínas/carbohidratos/grasas, promedios semanales, agua/ejercicio/pasos

get_exercise_log

Ejercicio registrado en MFP (duración, calorías, distancia, FC) y pasos diarios

get_weight_log

Registros de peso en MFP

get_profile

Nombre, sexo, fecha de nacimiento/edad, altura, configuración regional + estado del token

run_diagnostics

Prueba de extremo a extremo: renovación del token, perfil, qué tipos/campos del diario acepta la cuenta (con muestras sin procesar), medidas, endpoints candidatos de objetivos

query_endpoint

Vía de escape: llama a cualquier endpoint de api.myfitnesspal.com / identidad con la autenticación del conector aplicada

refresh_data

Descarta los días en caché y la forma de solicitud recordada, renueva el token

delete_my_data

Elimina todo lo almacenado en caché para tu cuenta

Solución de problemas: si una herramienta da error o faltan datos, ejecuta run_diagnostics primero. Informa de la combinación exacta de types/fields[] que MFP acepta para tu cuenta y de una muestra sin procesar por tipo de elemento.


Related MCP server: MyFitnessPal MCP Server

Cómo funciona

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

Inicio de sesión (una vez, en la página /authorize del conector)

  1. POST identity-api.myfitnesspal.com/oauth/token — token de credenciales de cliente para el cliente OAuth de la aplicación móvil.

  2. GET identity-api…/clientKeys — la clave de firma HS512 que MFP usa para los inicios de sesión con contraseña.

  3. POST identity-api…/oauth/authorize con credentials=<JWT{username, password}> — devuelve una redirección a mfp://identity/callback?code=….

  4. POST …/oauth/token (authorization_code) — tokens de acceso + actualización + id.

  5. GET identity-api…/users/{sub} — el id de usuario del dominio MFP (cabecera mfp-user-id) y el perfil.

Solo se conserva el token de actualización (y el primer token de acceso), cifrado dentro de las propiedades de la concesión OAuth; la contraseña nunca se almacena. A partir de entonces, el Worker lo renueva en silencio; el token de actualización rotado más reciente permanece sellado en KV.

Lectura del diario

GET api.myfitnesspal.com/v2/diary?entry_date=YYYY-MM-DD&types=…&fields[]=… con Authorization: Bearer, mfp-user-id, mfp-client-id y las cabeceras api-version/user-agent de la app. Tipos de elemento: food_entry, diary_meal, exercise_entry, water, steps_aggregate. La paginación sigue la cabecera Link: rel=next.

Los types/fields[] exactos que acepta el token móvil no están documentados, así que el cliente los descubre: prueba la solicitud más completa, luego un conjunto de campos más pequeño, luego sin campos, luego un tipo a la vez — y recuerda la combinación ganadora durante un día. Cualquier rechazo se informa en el resultado de la herramienta. Los días completados son inmutables y se almacenan en caché (sellados) durante 30 días; el día de hoy siempre se consulta en vivo. Cada día es una llamada upstream, por lo que las ventanas están limitadas a 92 días.

Mapeo de campos

nutritional_contents → claves con sufijo de unidad: energy_kcal (convertido de kJ), 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 y calcium/iron/vitamin_a/vitamin_c/vitamin_d_pct_dv (MFP los almacena como porcentaje del valor diario). Los nutrientes desconocidos se conservan en extra.

Los totales del día provienen de los resúmenes diary_meal propios de MFP cuando están presentes (totals_source: "diary_meal"); de lo contrario, de la suma de las filas de food_entry.

Caché y cifrado

Todo lo que se escribe en el namespace KV MFP_CACHE — tokens, la forma de solicitud descubierta, días del diario — está sellado con AES-256-GCM con una clave derivada de SESSION_ENCRYPTION_KEY, individualizada por usuario. Sin el secreto, la caché está desactivada. Los fallos de caché nunca rompen una solicitud.


De dónde vienen las credenciales del cliente

El flujo de identidad necesita el id y el secret del cliente OAuth, incrustados en la aplicación MyFitnessPal para Android. No se reproducen aquí; el cliente Go enlazado arriba los incluye en su .env.sample. Configúralos como secretos del Worker MFP_CLIENT_ID y MFP_CLIENT_SECRET. Si MFP los rota, el inicio de sesión deja de funcionar hasta que se actualicen.

Despliegue

Opción A — GitHub Actions

.github/workflows/deploy.yml se despliega en cada push a master. Los secretos residen en Cloudflare; GitHub solo guarda CLOUDFLARE_API_TOKEN y CLOUDFLARE_ACCOUNT_ID.

  1. Crea dos namespaces KV (MFP_OAUTH_KV, MFP_CACHE) y pon sus identificadores en wrangler.jsonc.

  2. Añade los dos secretos de GitHub y haz push.

  3. En Cloudflare (Workers & Pages → myfitnesspal-mcp → Configuración → Variables y secretos) añade los secretos SESSION_ENCRYPTION_KEY (cualquier cadena aleatoria larga), MFP_CLIENT_ID, MFP_CLIENT_SECRET. Opcionalmente, establece la variable ALLOWED_EMAILS con tu correo de MFP para que nadie más pueda conectarse a tu despliegue.

Opción B — wrangler local

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

Conectar en Claude

  1. Configuración → Conectores → Añadir conector personalizado.

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

  3. Haz clic en Conectar → inicia sesión con tu correo/nombre de usuario y contraseña de MyFitnessPal → listo.

Entonces: "Ejecuta diagnósticos en MyFitnessPal y luego muéstrame la nutrición de ayer."

Icono del conector

El Worker anuncia PUBLIC_URL/icon.png en sus serverInfo.icons de MCP (y websiteUrl), de modo que los clientes que muestran la marca del servidor lo ven en la lista de conectores. El predeterminado es un icono generado de plato y cubiertos (npm run icon). Para usar en su lugar el icono oficial de la aplicación MyFitnessPal, guarda el PNG de la ficha de App Store / Play Store e incrústalo:

npm run icon:embed -- ~/Downloads/myfitnesspal-icon.png   # writes src/icon.ts + assets/icon.png
npm run deploy

(La marca oficial es una marca comercial de MyFitnessPal — está bien para un despliegue personal, no para su redistribución, por lo que no está en este repositorio).

Desarrollo local

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

Notas y límites

  • No oficial. El cliente privado de la aplicación se usa con tus propias credenciales para uso personal; MFP puede rotar el cliente o cambiar la API.

  • Health Connect ya sincroniza los resúmenes de comidas de MFP con Google Health; lo que esto añade es el registro de cada alimento con marcas de tiempo, micros, agua, ejercicio de MFP y peso.

  • Los objetivos de nutrientes aún no tienen un endpoint confirmado — run_diagnostics barre candidatos y query_endpoint puede explorarlos.

  • Límites de subpeticiones. Cada día del diario es una llamada upstream; en el plan gratuito de Workers (50 subpeticiones/petición) mantén cortas las ventanas no almacenadas en caché. Los días en caché son baratos.

  • Los cambios de contraseña invalidan el token de actualización — desconecta y vuelve a conectar el conector.

Privacidad

  • Tu contraseña se intercambia una vez por tokens y nunca se almacena; el token de actualización se guarda cifrado dentro de la concesión OAuth.

  • Los datos del diario se almacenan en caché solo en tu propio namespace KV, sellados y eliminables con delete_my_data; no se envía nada a ningún tercero.

Licencia

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