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.
Related MCP server: Nutrition and Training Tracker MCP
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.
Related MCP Connectors
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Unlock the power of food transparency with our Open Food Facts MCP server. Easily look up any food
MCP server for AI dialogue using various LLM models via AceDataCloud
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceMCP server for MealMastery AI meal planning that enables users to manage meal plans, recipes, and grocery lists through natural language conversation with AI agents like Claude.41 npmMIT
- FlicenseNot gradedqualityCmaintenanceMCP server for tracking nutrition meals and workouts, integrating with claude.ai to manage food logs, macros, exercise catalogs, and generate daily/weekly summaries.-
- AlicenseNot gradedqualityDmaintenanceAn MCP server that lets you log meals through Claude (and soon ChatGPT) in plain language, using India's official food composition data (IFCT 2017) plus USDA, enabling accurate calorie and macro tracking for Indian dishes with household units and photo logging.54 npm2AGPL 3.0
- AlicenseNot gradedqualityDmaintenanceAn MCP server for nutritionists to manage patients, prescriptions, anthropometry, and meal plans, integrating with Claude, Cursor, and other AI agents.MIT