Elite MCP
Elite MCP
Ein MCP-Server (Model Context Protocol), der einem KI-Agenten direkten, Echtzeit-Lese-/Schreibzugriff auf eine selbst gehostete Elite-Instanz gibt – einen persönlichen Fitness-Tracker für Workouts, Ernährung, Cardio und Körpergewicht.
Wenn Sie ein Agent sind, der dies liest, um zu entscheiden, wie dieser Server verwendet werden soll: Lesen Sie die gesamte Datei, bevor Sie ein Tool aufrufen. Sie behandelt, was jedes Tool tut, was seine Argumente bedeuten, welche Einheiten/Formate erwartet werden und wo die Stolperfallen liegen (hauptsächlich: Schreibvorgänge sind sofort und real, es gibt kein Rückgängigmachen). Die Abschnitte „Hinweise zum Datenmodell“ und „Sicherheitshinweise“ unten sind genauso wichtig wie die Tool-Liste selbst.
Was dies ist und was es nicht ist
Elite (die App) speichert alles in einer eigenen SQLite-Datenbank hinter einer einfachen REST-API – kein lokaler Cache, keine Offline-Warteschlange, eine einzige Quelle der Wahrheit. Dieser MCP-Server ist ein dünner Protokolladapter über diese API: Jeder Tool-Aufruf hier ist eine (oder zwei) HTTP-Anfrage an eine spezifische, bereits laufende Elite-Instanz, auf die Sie ihn zeigen. Er hält keinen eigenen Zustand und macht kein Caching – rufen Sie get_workout_history zweimal hintereinander auf und Sie erhalten zwei frische Lesevorgänge.
Es ist keine allgemeine Fitness-API, es spricht nicht mit anderen Apps und führt keine Lebensmittel-Datenbanksuchen durch (keine OpenFoodFacts/USDA-Suche) – diese Suchlogik lebt clientseitig in der Elite-Web-App selbst und ist nicht über HTTP verfügbar. Wenn Sie ein Lebensmittel protokollieren müssen, das nicht bereits in den Daten dieses Benutzers vorhanden ist, verwenden Sie log_food mit Makros, die Sie bereits kennen oder die der Benutzer Ihnen gibt; es gibt hier kein Tool „Suche nach Lebensmittel nach Name“.
Anforderungen
Eine laufende Elite-Instanz, für die Sie die URL haben (z. B.
http://192.168.1.50:8080oder wo auch immer sie selbst gehostet wird). Siehe das Elite-Repo, falls Sie eine aufsetzen müssen.Node.js 18+.
Wenn diese Elite-Instanz mit gesetztem
API_TOKENgestartet wurde, benötigen Sie denselben Token.
Einrichtung
git clone https://github.com/natyavidhan/elite-mcp.git
cd elite-mcp
npm install
cp .env.example .env # then fill in ELITE_BASE_URL (and ELITE_API_TOKEN if the server needs one)Dies ist ein standardmäßiger stdio-MCP-Server – er soll von der eigenen Konfiguration eines MCP-Clients gestartet werden, nicht eigenständig laufen und offen bleiben. Richten Sie Ihren Agenten/Client auf node /path/to/elite-mcp/index.js mit ELITE_BASE_URL (und optional ELITE_API_TOKEN) als Umgebungsvariablen. Für einen Client, der eine JSON-Konfiguration liest (Claude Desktop, Claude Code und die meisten anderen folgen dieser Form):
{
"mcpServers": {
"elite": {
"command": "node",
"args": ["/path/to/elite-mcp/index.js"],
"env": {
"ELITE_BASE_URL": "http://192.168.1.50:8080",
"ELITE_API_TOKEN": ""
}
}
}
}Für eine Agenten-Laufzeit ohne JSON-Konfigurations-MCP-Client (z. B. ein benutzerdefinierter Orchestrator) sind dieselben zwei Umgebungsvariablen plus das Starten von node index.js über stdio der gesamte Vertrag – siehe index.js und src/client.js, beide kurz.
Wenn ELITE_BASE_URL nicht gesetzt ist, protokolliert der Prozess einen Fehler auf stderr und beendet sich sofort, anstatt in einem defekten Zustand zu starten.
Werkzeuge
Insgesamt 20 Werkzeuge: 1 Verbindungsprüfung, 11 schreibgeschützte Analysewerkzeuge, 1 Nachschlagewerkzeug und 7 Schreibwerkzeuge. Jedes Werkzeug gibt sein Ergebnis als JSON-Textblock zurück; ein Fehler (Elite nicht erreichbar, falscher Token, 404, Validierungsfehler) kommt als normales Werkzeugergebnis mit isError: true und einem {"error": "..."}-Body zurück – es stürzt die MCP-Verbindung nicht ab, also prüfen Sie das, anstatt Erfolg anzunehmen.
Verbindung
check_connection– keine Argumente. Ruft/api/healthvon Elite auf. Rufen Sie dies zuerst auf, wenn etwas anderes fehlschlägt; es sagt Ihnen, ob der Server überhaupt erreichbar ist und ob sein AI Coach aktiviert ist (für diesen MCP-Server irrelevant, aber ein nützliches Signal, dass Sie mit der richtigen Instanz sprechen).
Analyse (schreibgeschützt)
Diese spiegeln genau das wider, was Elites eigener integrierter AI Coach intern aufruft – gleiche Funktionen, gleiche Mathematik, sodass die Zahlen hier immer mit dem übereinstimmen, was der Benutzer in der App sieht.
get_workout_history({ days? })– Sitzungen der letzten N Tage (Standard 30): Datum, Übungen, Sätze, Gesamtvolumen.get_exercise_trend({ exerciseName, limit? })– bestes Gewicht pro Sitzung für eine Übung im Zeitverlauf, plus sein Allzeit-PR.exerciseNamewird unscharf abgeglichen (exakte ID, exakter Name oder Teilstring) – Sie benötigenlist_exercisesnicht zuerst, nur um einen Trend zu lesen.get_personal_records({ limit? })– bestes Gewicht und bestes Einzelsatzvolumen pro Übung, schwerste zuerst.get_muscle_volume({ date })– Muskel-für-Muskel-Volumen für einen bestimmten Tag (primäre Muskeln volle Anrechnung, sekundäre halbe Anrechnung).get_weekly_muscle_summary({ days? })– Gesamtvolumen pro Muskel über die letzten N Tage (Standard 7), sortiert – verwenden Sie dies, um zu finden, was untertrainiert ist.get_muscle_exercise_split({ muscle, days? })– welche Übungen das Volumen eines Muskels ausmachen und welchen Anteil jede hat (z. B. „Wie ist meine Trizeps-Aufteilung“).musclemuss einer der unten aufgeführten Enum-Werte sein.get_food_log({ date })– jeder Eintrag, der an einem Datum protokolliert wurde, mit Makros, plus die Tagesgesamtwerte.get_nutrition_trend({ days? })– tägliche Kalorien-/Makro-Gesamtwerte über die letzten N Tage (Standard 7) plus die konfigurierten Tagesziele des Benutzers.get_cardio_summary({ days? })– Cardio-Sitzungen über die letzten N Tage (Standard 30) plus persönliche Bestleistungen.get_body_weight_trend({ days? })– Einträge über die letzten N Tage (Standard 90) plus aktuell/Start/Veränderung/7-Tage-Durchschnitt.get_consistency({ days? })– pro Tag, ob der Benutzer ein Workout, Essen, Cardio und Körpergewicht protokolliert hat, über die letzten N Tage (Standard 14).
Nachschlagen
list_exercises({ query? })– der vollständige Übungskatalog (integriert + benutzerdefinierte Übungen dieser Instanz), optional gefiltert durch einen case-insensitiven Teilstring-Abgleich auf ID oder Name. Rufen Sie dies vorlog_workout_setauf, wenn Sie die genaueexerciseIdnicht bereits kennen – der Katalog verwendet spezifische IDs wiebarbell_bench_press, nicht Freitext, undlog_workout_setlehnt alles ab, was keine echte ID ist.
Schreibvorgänge
Jeder Schreibvorgang hier wirkt sofort auf der Live-Elite-Instanz – siehe Sicherheitshinweise unten, bevor Sie diese auf echten Daten einer Person verwenden.
log_workout_set({ date, exerciseId, reps, weightKg, rpe? })– protokolliert einen Satz. Erstellt die Workout-Sitzung des Tages automatisch, falls sie noch nicht existiert. Gibt den erstellten Satz undisPR: true/falsezurück.rpe(Rate der wahrgenommenen Anstrengung, 1–10) ist optional.delete_workout_set({ setId })– löscht einen protokollierten Satz.delete_workout_session({ sessionId })– löscht eine gesamte Sitzung und jeden Satz darunter. Es gibt keinen Bestätigungsschritt – dieses Werkzeug tut genau das, was es sagt.log_food({ date, mealType, name, quantityG, calories, protein?, carbs?, fat? })– protokolliert einen Lebensmitteleintrag. Makros sind die Gesamtwerte fürquantityG, nicht pro 100 g (dieses Werkzeug führt diese Umrechnung für Sie durch). Erstellt im Hintergrund ein Lebensmittel mitmanual-Quelle.delete_food_log({ logId })– löscht einen protokollierten Lebensmitteleintrag.log_cardio_session({ date, activityType, durationSeconds, distanceKm?, avgHeartRate?, caloriesBurned?, notes? })– protokolliert eine Cardio-Sitzung.log_body_weight({ date, weightKg, bodyFatPct?, notes? })– Upsert nach Datum: Das erneute Protokollieren für ein Datum, das bereits einen Eintrag hat, überschreibt diesen, anstatt ein Duplikat zu erstellen. Dies ist beabsichtigt (so verhält sich auch die Elite-App selbst), kein Fehler.
Hinweise zum Datenmodell
Daten sind immer
YYYY-MM-DD-Zeichenfolgen, ohne Zeitkomponente, ohne Zeitzone. Es gibt keinen „heute“-Helfer auf diesem Server – wenn ein Benutzer sagt „logge das für heute“, lösen Sie das heutige Datum selbst auf, bevor Sie ein Werkzeug aufrufen.IDs (
sessionId,setId,logId,exerciseIdusw.) sind undurchsichtige Zeichenfolgen, die vom Elite-Server erstellt werden (oder bei Übungen in seinem Katalog definiert sind) – konstruieren oder raten Sie niemals eine. Holen Sie sie aus dem Ergebnis eines vorherigen Werkzeugs (einelog_workout_set-Antwort gibt Ihnen eine echteset.idundsessionId) oder auslist_exercises.muscle-Enum (fürget_muscle_exercise_split):chest,triceps,shoulder,lats,bicep,forearm,traps,quads,hamstrings,glutes,calves,abs.mealType:breakfast,lunch,dinner,snack.activityType:run,walk,cycle,swim,other.Gewichte sind Kilogramm, Entfernungen sind Kilometer, Dauern sind Sekunden – immer, unabhängig davon, in welchem Einheitensystem die Benutzeroberfläche von Elite eingestellt ist.
Sicherheitshinweise
Es gibt kein Rückgängigmachen.
delete_workout_set,delete_workout_sessionunddelete_food_logsind echte, sofortige Löschungen gegen die tatsächliche Trainings-/Ernährungshistorie des Benutzers. Rufen Sie ein Löschwerkzeug nicht spekulativ auf oder „nur um zu sehen, was passiert“ – bestätigen Sie zuerst mit dem Benutzer, es sei denn, sie haben die Löschung ausdrücklich verlangt.log_body_weightüberschreibt stillschweigend einen vorhandenen Eintrag für dieses Datum, anstatt einen Fehler zu melden oder zu fragen – wenn Sie nicht sicher sind, ob der Benutzer das heutige Gewicht bereits protokolliert hat, rufen Sie zuerstget_body_weight_trendauf.Dieser Server führt keine Autorisierung über den einzelnen gemeinsamen
ELITE_API_TOKENhinaus durch (falls die Zielinstanz einen verwendet) – er hat genau so viel Zugriff, wie dieser Token gewährt, was standardmäßig alles ist. Behandeln Sie ihn entsprechend.
Repository-Struktur
index.js entry point — starts the stdio MCP server
src/client.js fetch wrapper around the target Elite instance's REST API
src/tools.js every tool's schema + implementationVerwandt
natyavidhan/elite – der Tracker selbst. Seine README dokumentiert die vollständige REST-API, auf der dieser Server aufbaut (
/api/data/*,/api/workout/*,/api/analytics/*usw.), falls Sie etwas benötigen, das dieser MCP-Server nicht bereits als Werkzeug bereitstellt.
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 Connectors
Create Hevy routines and analyze your training from chat. Unofficial; BYO Hevy PRO API key.
Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
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/natyavidhan/elite-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server