foodvisor-mcp
foodvisor-mcp
Ein Remote-Model Context Protocol-Server, der die Foodvisor-Ernährungs-API für LLM-Agenten (Claude, Cursor, …) bereitstellt. Suchen Sie nach Lebensmitteln, protokollieren Sie Mahlzeiten, rufen Sie Fortschritte und Makros ab — alles direkt von Ihrem Assistenten aus.
Haftungsausschluss. Dieses Projekt ist inoffiziell. Es verwendet die private mobile API von Foodvisor durch Reverse Engineering der Anfragen und wird nicht von Foodvisor unterstützt. Die Nutzung erfolgt auf eigene Gefahr; Endpunkte können sich ohne Vorankündigung ändern.
Funktionen
🥗 Katalogsuche mit Kalorien, Makros, Marke, Bild, Nutriscore.
📒 Mahlzeiten protokollieren (Frühstück/Mittagessen/Abendessen/Snack/benutzerdefiniert_*) mit Mengen und Portionsmultiplikatoren.
📊 Tägliche Zusammenfassung — serverseitige Aggregation von Kalorien und Makros im Vergleich zu Ihren Zielen.
📈 Fortschritt — Verlauf von täglichen Kalorien, Gewicht und Bewertung (≈90 Tage).
🔥 Serie (Streak) — aktuelle aufeinanderfolgende Protokollierungstage und verfügbare Pausen.
💧 Wasserprotokoll.
👤 Profil & Ernährungsziele — wochentagsbezogene Kalorien-/Makroziele.
🔐 OAuth 2.1 + PKCE mit dynamischer Client-Registrierung — funktioniert als One-Click-Claude-Connector.
🔄 Zustandslos für mehrere Benutzer: Tokens sind in sich geschlossen (keine Datenbank). Foodvisor-Refresh-Tokens werden innerhalb des OAuth-ausgestellten JWT verschlüsselt (AES-256-GCM).
♻️ Automatischer Access-Token-Refresh mit In-Memory-Caching und Schutz vor Anfragen-Überlastung.
Verfügbare MCP-Tools
Tool | Beschreibung |
| Durchsucht den Foodvisor-Katalog per Freitextabfrage. |
| Vollständige Nährwertinformationen (Makros, Vitamine, Einheiten) für eine oder mehrere |
| Fügt Lebensmittel zu einem Mahlzeiten-Slot an einem bestimmten Datum hinzu. |
| Protokollierte Mahlzeiten in einem Datumsbereich. |
| Gesamtkalorien/-makros für einen Tag im Vergleich zu Ihren Zielen. |
| Tägliche Kalorien, Gewicht und Foodvisor-Bewertung für ca. 90 Tage. |
| Anteil der A/B/C/D-Mahlzeiten über rollierende 7/30/90-Tage-Fenster. |
| Aktuelle Protokollierungsserie und Pausen. |
| Tägliche Wasseraufnahme in einem Datumsbereich. |
| Profil und Ernährungsziele. |
Schnellstart mit Docker
git clone https://github.com/cldt-fr/foodvisor-mcp.git
cd foodvisor-mcp
docker compose up -dDer Server lauscht nun auf http://localhost:3000/mcp. Health-Check unter /health.
Um den Server hinter einem Reverse Proxy (Caddy, Traefik, nginx) auf einer öffentlichen Domain zu betreiben, beenden Sie einfach TLS vor Port 3000.
Authentifizierung
foodvisor-mcp unterstützt zwei Authentifizierungsmethoden, die beide auf demselben zugrunde liegenden Anmeldeinformation basieren — Ihrem Foodvisor Refresh Token:
OAuth 2.1 (empfohlen) — der Server ist ein vollständiger OAuth-Autorisierungsserver mit dynamischer Client-Registrierung und PKCE. Kompatible MCP-Clients (Claude, Cursor, …) handhaben den Ablauf automatisch: Sie entdecken die Auth-Endpunkte, registrieren sich selbst und öffnen eine Login-Seite, auf der Sie Ihr Foodvisor-Refresh-Token einmalig einfügen. Der Server stellt dann sein eigenes JWT aus, in dem Ihr Refresh-Token AES-256-GCM-verschlüsselt enthalten ist.
Direct Bearer (für Power-User) — übergeben Sie Ihr Foodvisor-Refresh-JWT direkt als
Authorization: Bearer …. Nützlich für Skripte oder schnelle Tests. Der Server erkennt das Token-Format und leitet es wie zuvor weiter.
In beiden Fällen werden keine benutzerspezifischen Zustände auf dem Server gespeichert: Das OAuth-ausgestellte JWT ist in sich geschlossen und der Legacy-Modus ist reines Passthrough.
Abrufen Ihres Foodvisor-Refresh-Tokens
Foodvisor authentifiziert sich nur über Apple Sign-In auf iOS — es gibt keinen öffentlichen OAuth- oder Passwort-Endpunkt. Erfassen Sie die POST /user/auth/-Antwort auf einem echten iPhone mit Charles Proxy (oder Proxyman, mitmproxy, …), das als HTTPS-Man-in-the-Middle konfiguriert ist:
Installieren Sie das Root-Zertifikat von Charles auf Ihrem iPhone und aktivieren Sie das volle Vertrauen.
Beenden Sie die Foodvisor-App vollständig und öffnen Sie sie erneut, melden Sie sich dann an.
Suchen Sie nach einer
POST https://api.foodvisor.io/api/6.0/ios/FR/fr_FR/user/auth/-Anfrage. Die JSON-Antwort enthälttokens.refresh— das ist Ihr langlebiges Anmeldeinformation (≈ 6 Monate).
Refresh-Tokens bieten vollen Zugriff auf Ihre Ernährungshistorie. Behandeln Sie diese wie Passwörter.
Konfiguration eines MCP-Clients
Claude (Web / Desktop / Code) — OAuth
Fügen Sie den Server als Connector mit seiner öffentlichen /mcp-URL hinzu (z. B. https://foodvisor-mcp.example.com/mcp). Claude wird:
Die OAuth-Metadaten unter
/.well-known/oauth-protected-resourceund/.well-known/oauth-authorization-serverentdecken.Sich selbst über
POST /registerregistrieren.Die
/authorize-Seite in Ihrem Browser öffnen. Fügen Sie Ihr Foodvisor-Refresh-Token in das Formular ein und senden Sie es ab.Den zurückgegebenen Code gegen ein langlebiges Access-Token (Standard 30 Tage) austauschen.
Danach können Sie die Tools direkt aus Claude heraus verwenden. Wenn das Access-Token abläuft, führt Claude den Ablauf erneut aus.
Direct Bearer (jeder MCP-Client, der Streamable HTTP unterstützt)
{
"mcpServers": {
"foodvisor": {
"url": "https://foodvisor-mcp.example.com/mcp",
"headers": {
"Authorization": "Bearer <YOUR_FOODVISOR_REFRESH_TOKEN>"
}
}
}
}Lokale Entwicklung
Erfordert Node ≥ 22.
npm install
npm run dev # tsx watch on $PORT (default 3000)
npm run typecheck
npm run build && npm startProjektstruktur
src/
├── index.ts # Node http server + per-request MCP transport + OAuth routes
├── env.ts # zod-validated env vars
├── auth/
│ ├── extract.ts # Bearer parsing — accepts OAuth JWT and legacy Foodvisor refresh
│ └── token-cache.ts # Foodvisor access-token cache + refresh
├── oauth/
│ ├── jwt.ts # HS256 sign/verify + AES-256-GCM encrypt/decrypt
│ ├── store.ts # in-memory clients + auth codes (TTL)
│ ├── login.ts # HTML login page (paste refresh token)
│ ├── handlers.ts # /register, /authorize, /token handlers
│ └── metadata.ts # /.well-known/* metadata builders
├── foodvisor/
│ ├── client.ts # fetch wrapper with 401 retry
│ ├── endpoints.ts # typed endpoint helpers
│ └── types.ts # response shapes
└── mcp/
├── server.ts # createMcpServer(ctx)
└── tools/ # one file per tool group
├── food.ts
├── meal.ts
├── progress.ts
├── trackers.ts
└── profile.tsDer HTTP-Server ist bewusst minimal gehalten (kein Express/Hono) — jeder POST /mcp-Aufruf startet einen neuen McpServer, der an die userId/refreshToken des Aufrufers und einen zustandslosen StreamableHTTPServerTransport gebunden ist.
Umgebungsvariablen
Variable | Standard | Zweck | |||
|
| HTTP-Listen-Port | |||
|
|
|
|
|
|
| abgeleitet | Öffentlicher Ursprung (z. B. | |||
| zufällig | HMAC-Geheimnis zum Signieren von OAuth-ausgestellten Tokens. Min. 32 Zeichen. In der Produktion explizit setzen — andernfalls werden Tokens bei jedem Neustart ungültig. | |||
|
| Lebensdauer von OAuth-Access-Tokens in Sekunden (Standard 30 Tage). | |||
|
| Nur zum Testen überschreiben | |||
|
| Vom Upstream verwendeter Locale-Pfad-Präfix |
Generieren Sie ein stabiles Geheimnis mit:
openssl rand -base64 48Sicherheitshinweise
Der Server ist ein vertrauenswürdiger Proxy für Foodvisor: Jeder, der ein gültiges Foodvisor-Refresh-Token besitzt, kann es verwenden, um die Ernährungsdaten dieses Benutzers zu lesen und zu schreiben. Schützen Sie den
/mcp-Endpunkt in der Produktion mit HTTPS und ziehen Sie IP-Allowlists in Betracht, falls er öffentlich zugänglich ist.Tokens werden nur im Prozessspeicher gehalten. Sie werden niemals auf die Festplatte geschrieben.
Der Token-Cache wird über die
user_iddes JWT indiziert, sodass gleichzeitige Anfragen desselben Benutzers sich ein Access-Token teilen; gleichzeitige Refresh-Versuche werden über eine In-Flight-Map zusammengeführt.
Roadmap
Foto-basierte Mahlzeitenerkennung (Foodvisors Killer-Feature), sobald der Upload-Endpunkt per Reverse Engineering entschlüsselt wurde.
Aktivitätenprotokoll, Gewichtsmessungen, benutzerdefinierte Rezepte & Favoriten.
Optionaler persistenter Token-Speicher für Ausfallsicherheit bei Neustarts.
Mitwirken
Issues und PRs sind willkommen unter https://github.com/cldt-fr/foodvisor-mcp. Bitte eröffnen Sie keine Issues mit der Bitte um Hilfe beim Reverse Engineering von Foodvisor-Endpunkten; erfassen Sie diese selbst mit Charles/Proxyman und steuern Sie einen typisierten Wrapper bei.
Lizenz
MIT — siehe LICENSE.
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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/cldt-fr/foodvisor-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server