Skip to main content
Glama
a1dancole

MyFitnessPal MCP

by a1dancole

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

get_daily_nutrition

„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

get_food_log

Einzelne Lebensmitteleinträge über einen Zeitraum, filterbar nach Mahlzeit oder Textsuche – was rund um Trainingseinheiten gegessen wurde, wiederkehrende Lebensmittel

get_nutrition_trend

Tageswerte über ein Zeitfenster mit Mittelwerten über protokollierte Tage, min/max Energie, Energieverteilung Protein/Kohlenhydrate/Fett, Wochenmittel, Wasser/Training/Schritte

get_exercise_log

In MFP protokollierte Trainingseinheiten (Dauer, Kalorien, Distanz, Herzfrequenz) und tägliche Schritte

get_weight_log

In MFP erfasste Gewichtseinträge

get_profile

Name, Geschlecht, Geburtsdatum/Alter, Größe, Gebietsschema + Token-Status

run_diagnostics

End-to-End-Test: Token-Refresh, Profil, welche Diary-Typen/-Felder das Konto akzeptiert (mit Rohdatenbeispielen), Messwerte, mögliche Ziel-Endpunkte

query_endpoint

Notausstieg: beliebigen api.myfitnesspal.com- bzw. Identity-Endpunkt mit der Authentifizierung des Connectors aufrufen

refresh_data

Zwischengespeicherte Tage + gemerkte Anfrageform verwerfen, Token aktualisieren

delete_my_data

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_diagnostics aus. Es meldet die genaue types/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/v2

Anmeldung (einmalig, auf der /authorize-Seite des Connectors)

  1. POST identity-api.myfitnesspal.com/oauth/token – Client-Credentials-Token für den OAuth-Client der mobilen App.

  2. GET identity-api…/clientKeys – der HS512-Signaturschlüssel, den MFP für Passwort-Anmeldungen verwendet.

  3. POST identity-api…/oauth/authorize mit credentials=<JWT{username, password}> – liefert eine Weiterleitung an mfp://identity/callback?code=….

  4. POST …/oauth/token (authorization_code) – Access-, Refresh- und ID-Token.

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

  1. Erstelle zwei KV-Namespaces (MFP_OAUTH_KV, MFP_CACHE) und trage ihre IDs in wrangler.jsonc ein.

  2. Füge die beiden GitHub-Secrets hinzu und pushe.

  3. Füge in Cloudflare (Workers & Pages → myfitnesspal-mcp → Settings → Variables and Secrets) die Secrets SESSION_ENCRYPTION_KEY (eine beliebige lange Zufallszeichenfolge), MFP_CLIENT_ID und MFP_CLIENT_SECRET hinzu. Setze optional die Variable ALLOWED_EMAILS auf 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 deploy

In Claude verbinden

  1. Einstellungen → Connectors → Benutzerdefinierten Connector hinzufügen.

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

  3. Klicke 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 icon

Hinweise & 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_diagnostics prüft Kandidaten und query_endpoint kann 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_data löschbar; an Dritte wird nichts gesendet.

Lizenz

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