MyFitnessPal MCP
MyFitnessPal MCP – Ernährungsdaten für deinen Claude-Trainingscoach
Ein Remote-MCP-Server, bereitgestellt auf Cloudflare Workers, der dein MyFitnessPal-Tagebuch für Claude zugänglich macht – jedes Lebensmittel mit Portion und Uhrzeit, Summen pro Mahlzeit und Tag für Energie, Makros und Mikros, Wasser, protokollierte Trainingseinheiten, Schritte und Gewicht. Füge ihn einmal als benutzerdefinierten Connector hinzu, und er funktioniert auf Claude Web, Desktop und Mobil. Passt zu den Strava-, Google-Health- und Renpho-Connectoren, damit dein Coach Trainingsbelastung, Erholung, Körperzusammensetzung und Ernährung sieht.
So spricht der Server mit MFP: MyFitnessPal hat keine öffentliche API (das Partnerprogramm ist geschlossen). Dieser Server verwendet den eigenen OAuth-Identity-Flow der mobilen App und dieselbe
api.myfitnesspal.com/v2-API, die auch die App verwendet – diejenige, die die archivierten Partnerdokumente unter myfitnesspalapi.com beschreiben. Kein Browser, keine Cookies, kein Scraping, kein Captcha. Dank für den Identity-Flow geht an seonixx/myfitnesspal und jnelle/MyFitnesspal-API-Golang. Inoffiziell; MFP kann es jederzeit ändern.
Tools
Tool | Was es beantwortet |
| „Was habe ich heute gegessen?“ – Summen pro Mahlzeit und Tag (Energie, Protein, Kohlenhydrate, Netto-Kohlenhydrate, Ballaststoffe, Zucker, Fettunterarten, Cholesterin, Natrium, Kalium, %DV-Mikros), jedes Lebensmittel mit Portion und Zeitstempel, Wasser, Training, Schritte, Gewichtseinträge |
| Einzelne Lebensmitteleinträge über einen Zeitraum, filterbar nach Mahlzeit oder Textsuche – was rund um Trainingseinheiten gegessen wurde, wiederkehrende Lebensmittel |
| Tageswerte über ein Zeitfenster mit Mittelwerten über protokollierte Tage, min/max Energie, Energieverteilung Protein/Kohlenhydrate/Fett, Wochenmittel, Wasser/Training/Schritte |
| In MFP protokollierte Trainingseinheiten (Dauer, Kalorien, Distanz, Herzfrequenz) und tägliche Schritte |
| In MFP erfasste Gewichtseinträge |
| Name, Geschlecht, Geburtsdatum/Alter, Größe, Gebietsschema + Token-Status |
| End-to-End-Test: Token-Refresh, Profil, welche Diary-Typen/-Felder das Konto akzeptiert (mit Rohdatenbeispielen), Messwerte, mögliche Ziel-Endpunkte |
| Notausstieg: beliebigen |
| Zwischengespeicherte Tage + gemerkte Anfrageform verwerfen, Token aktualisieren |
| Alles löschen, was für dein Konto zwischengespeichert ist |
Fehlerbehebung: Wenn ein Tool einen Fehler meldet oder Daten zu fehlen scheinen, führe zuerst
run_diagnosticsaus. Es meldet die genauetypes/fields[]-Kombination, die MFP für dein Konto akzeptiert, sowie ein Rohdatenbeispiel pro Elementtyp.
Related MCP server: MyFitnessPal MCP Server
So funktioniert es
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/v2Anmeldung (einmalig, auf der /authorize-Seite des Connectors)
POST identity-api.myfitnesspal.com/oauth/token– Client-Credentials-Token für den OAuth-Client der mobilen App.GET identity-api…/clientKeys– der HS512-Signaturschlüssel, den MFP für Passwort-Anmeldungen verwendet.POST identity-api…/oauth/authorizemitcredentials=<JWT{username, password}>– liefert eine Weiterleitung anmfp://identity/callback?code=….POST …/oauth/token(authorization_code) – Access-, Refresh- und ID-Token.GET identity-api…/users/{sub}– die MFP-Domain-User-ID (mfp-user-id-Header) und das Profil.
Nur das Refresh-Token (und das erste Access-Token) wird aufbewahrt, verschlüsselt in den Eigenschaften des OAuth-Grants; das Passwort wird nie gespeichert. Danach erneuert der Worker das Token im Hintergrund; das neueste rotierte Refresh-Token liegt versiegelt in KV.
Tagebuch lesen
GET api.myfitnesspal.com/v2/diary?entry_date=YYYY-MM-DD&types=…&fields[]=… mit Authorization: Bearer, mfp-user-id, mfp-client-id und den api-version/user-agent-Headern der App. Elementtypen: food_entry, diary_meal, exercise_entry, water, steps_aggregate. Die Paginierung folgt dem Link: rel=next-Header.
Die genaue types/fields[]-Kombination, die das Mobile-Token akzeptiert, ist nicht dokumentiert. Der Client ermittelt sie daher selbst: Er versucht zuerst die umfangreichste Anfrage, dann einen kleineren Feldsatz, dann keine Felder, dann jeweils einen Typ – und merkt sich die gewinnende Kombination für einen Tag. Jede abgelehnte Kombination wird im Tool-Ergebnis gemeldet. Abgeschlossene Tage sind unveränderlich und werden 30 Tage lang (versiegelt) zwischengespeichert; der heutige Tag ist immer live. Jeder Tag entspricht einem Upstream-Aufruf, daher sind Zeitfenster auf 92 Tage begrenzt.
Feldzuordnung
nutritional_contents → Schlüssel mit Einheiten-Suffix: energy_kcal (kJ umgerechnet), 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 und calcium/iron/vitamin_a/vitamin_c/vitamin_d_pct_dv (MFP speichert diese als Prozentsatz des Tagesbedarfs). Unbekannte Nährstoffe bleiben unter extra erhalten.
Tageswerte stammen, sofern vorhanden, aus MFPs eigenen diary_meal-Zusammenfassungen (totals_source: "diary_meal"), andernfalls aus der Summe der food_entry-Zeilen.
Caching & Verschlüsselung
Alles, was in den KV-Namespace MFP_CACHE geschrieben wird – Tokens, die ermittelte Anfrageform, Tagebuchdaten – ist AES-256-GCM-versiegelt mit einem Schlüssel, der aus SESSION_ENCRYPTION_KEY abgeleitet und pro Benutzer vergeben wird. Ohne das Secret ist das Caching deaktiviert. Cache-Fehler lassen Anfragen nie scheitern.
Woher die Client-Zugangsdaten kommen
Der Identity-Flow benötigt die in der MyFitnessPal-Android-App eingebettete OAuth-Client-ID und das zugehörige Secret. Sie werden hier nicht wiedergegeben; der oben verlinkte Go-Client liefert sie in seiner .env.sample mit. Setze sie als Worker-Secrets MFP_CLIENT_ID und MFP_CLIENT_SECRET. Wenn MFP sie rotiert, funktioniert die Anmeldung nicht mehr, bis sie aktualisiert werden.
Bereitstellung
Option A – GitHub Actions
.github/workflows/deploy.yml wird bei jedem Push auf master bereitgestellt. Secrets liegen in Cloudflare; GitHub speichert nur CLOUDFLARE_API_TOKEN und CLOUDFLARE_ACCOUNT_ID.
Erstelle zwei KV-Namespaces (
MFP_OAUTH_KV,MFP_CACHE) und trage ihre IDs inwrangler.jsoncein.Füge die beiden GitHub-Secrets hinzu und pushe.
Füge in Cloudflare (Workers & Pages → myfitnesspal-mcp → Settings → Variables and Secrets) die Secrets
SESSION_ENCRYPTION_KEY(eine beliebige lange Zufallszeichenfolge),MFP_CLIENT_IDundMFP_CLIENT_SECREThinzu. Setze optional die VariableALLOWED_EMAILSauf deine MFP-E-Mail-Adresse, damit niemand sonst eine Verbindung zu deiner Bereitstellung herstellen kann.
Option B – lokal mit 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 deployIn Claude verbinden
Einstellungen → Connectors → Benutzerdefinierten Connector hinzufügen.
URL:
https://myfitnesspal-mcp.<subdomain>.workers.dev/mcpKlicke auf Verbinden → melde dich mit deiner MyFitnessPal-E-Mail/deinem Benutzernamen und Passwort an → fertig.
Dann: „Führe die Diagnose für MyFitnessPal aus und zeige mir dann die Ernährung von gestern.“
Connector-Symbol
Der Worker bewirbt PUBLIC_URL/icon.png in seinen MCP-serverInfo.icons (und websiteUrl), sodass Clients, die Server-Branding rendern, es in der Connector-Liste anzeigen. Standardmäßig ist es ein generiertes Teller-und-Besteck-Symbol (npm run icon). Um stattdessen das offizielle MyFitnessPal-App-Symbol zu verwenden, speichere das PNG aus dem App-Store-/Play-Store-Eintrag und bette es ein:
npm run icon:embed -- ~/Downloads/myfitnesspal-icon.png # writes src/icon.ts + assets/icon.png
npm run deploy(Das offizielle Zeichen ist eine Marke von MyFitnessPal – für eine persönliche Bereitstellung in Ordnung, nicht für die Weiterverbreitung, weshalb es nicht in diesem Repository enthalten ist.)
Lokale Entwicklung
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 iconHinweise & Grenzen
Inoffiziell. Der private Client der App wird mit deinen eigenen Anmeldedaten für den persönlichen Gebrauch verwendet; MFP kann den Client rotieren oder die API ändern.
Health Connect synchronisiert MFP-Mahlzeitzusammenfassungen bereits mit Google Health; was dies hinzufügt, ist das Lebensmittelprotokoll mit Zeitstempeln, Mikronährstoffen, Wasser, MFP-Training und Gewicht.
Nährstoffziele haben noch keinen bestätigten Endpunkt –
run_diagnosticsprüft Kandidaten undquery_endpointkann weiter untersuchen.Subrequest-Limits. Jeder Tagebuchtag entspricht einem Upstream-Aufruf; halte im kostenlosen Workers-Plan (50 Subrequests/Anfrage) nicht zwischengespeicherte Zeitfenster kurz. Zwischengespeicherte Tage sind günstig.
Passwortänderungen machen das Refresh-Token ungültig – trenne den Connector und verbinde ihn neu.
Datenschutz
Dein Passwort wird einmalig gegen Tokens eingetauscht und nie gespeichert; das Refresh-Token liegt verschlüsselt im OAuth-Grant.
Tagebuchdaten werden nur in deinem eigenen KV-Namespace zwischengespeichert, versiegelt und mit
delete_my_datalöschbar; an Dritte wird nichts gesendet.
Lizenz
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