MyFitnessPal MCP
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/v2que 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 |
| «¿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 |
| 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 |
| 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 |
| Ejercicio registrado en MFP (duración, calorías, distancia, FC) y pasos diarios |
| Registros de peso en MFP |
| Nombre, sexo, fecha de nacimiento/edad, altura, configuración regional + estado del token |
| 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 |
| Vía de escape: llama a cualquier endpoint de |
| Descarta los días en caché y la forma de solicitud recordada, renueva el token |
| Elimina todo lo almacenado en caché para tu cuenta |
Solución de problemas: si una herramienta da error o faltan datos, ejecuta
run_diagnosticsprimero. Informa de la combinación exacta detypes/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/v2Inicio de sesión (una vez, en la página /authorize del conector)
POST identity-api.myfitnesspal.com/oauth/token— token de credenciales de cliente para el cliente OAuth de la aplicación móvil.GET identity-api…/clientKeys— la clave de firma HS512 que MFP usa para los inicios de sesión con contraseña.POST identity-api…/oauth/authorizeconcredentials=<JWT{username, password}>— devuelve una redirección amfp://identity/callback?code=….POST …/oauth/token(authorization_code) — tokens de acceso + actualización + id.GET identity-api…/users/{sub}— el id de usuario del dominio MFP (cabeceramfp-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.
Crea dos namespaces KV (
MFP_OAUTH_KV,MFP_CACHE) y pon sus identificadores enwrangler.jsonc.Añade los dos secretos de GitHub y haz push.
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 variableALLOWED_EMAILScon 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 deployConectar en Claude
Configuración → Conectores → Añadir conector personalizado.
URL:
https://myfitnesspal-mcp.<subdomain>.workers.dev/mcpHaz 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 iconNotas 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_diagnosticsbarre candidatos yquery_endpointpuede 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
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