garmin-mcp
garmin-mcp
Ein kleiner MCP-Server, der Claude Desktop schreibgeschützten Zugriff auf Lauf-, Krafttrainings- und Kalorien-Daten von Garmin Connect bietet. Es gibt drei Werkzeuge und die Einrichtung dauert etwa fünfzehn Minuten.
Ich habe dies gebaut, weil ich unter anderem meinen Fortschritt verfolgen und einige Daten aus meinem eigenen Training analysieren wollte (z. B. wie hat sich mein Tempo bei lockeren Läufen verändert, oder was habe ich an Tagen gehoben, an denen ich auch gelaufen bin), ohne CSVs von Hand exportieren zu müssen. Es kommuniziert direkt mit der Connect-API von Garmin, sodass kein Drittanbieter-Dienst dazwischengeschaltet ist und nichts hochgeladen wird.
Die Werkzeuge
list_runs(limit, start): Datum, Laufart, Distanz, Zeit, durchschnittliches Tempo, durchschnittliche und maximale Herzfrequenz, Kadenz, Temperatur. Deckt auch Laufbandläufe ab.list_strength(limit, start): Datum, Name der Einheit, Dauer, Sätze, Wiederholungen, Brutto- und aktive Kalorien, durchschnittliche und maximale Herzfrequenz.daily_calories(days, end): Tagesgesamtwerte, aktive Kalorien und BMR-Kalorien, plus Schritte und Ruheherzfrequenz.
start ist ein Zeilenoffset und end ist ein Datum, sodass Claude durch Jahre der Geschichte blättern kann, anstatt nur die letzten Einträge zu sehen.
Alles ist schreibgeschützt. Die darunterliegende Bibliothek (garth-ng) stellt zwar Schreib-Endpunkte bereit, aber nichts hier ruft sie auf: Das ist das Einzige, was dies sicher macht, da die Token selbst vollen Kontozugriff gewähren.
Voraussetzungen
Python 3.12+, uv, Claude Desktop und ein Garmin Connect-Konto. Die folgenden Befehle setzen eine Unix-Shell voraus, also macOS oder Linux; Windows funktioniert auch, aber die Pfade unterscheiden sich. Claude Desktop läuft auf macOS, Windows und Linux (Beta, auf Ubuntu und Debian). Dies wird nicht in der Claude Mobile App oder in claude.ai funktionieren, da ein lokaler stdio-Server keine URL für diese bereitstellt.
Einrichtung
Ändern Sie Ihr Garmin-Passwort zu etwas, das Sie nirgendwo anders verwenden, da Sie es gleich in ein Skript eingeben werden.
Klonen und installieren:
git clone https://github.com/SuvirRathore/garmin-mcp-public.git
cd garmin-mcp-public
uv syncEinmal authentifizieren. Dies tauscht Ihr Passwort gegen OAuth-Token, die in
~/.garthgespeichert werden, danach wird das Passwort nie wieder benötigt:
cd garmin-mcp-public
uv run auth_setup.pyGeben Sie Ihren MFA-Code ein, wenn Sie dazu aufgefordert werden. Das OAuth1-Token hält etwa ein Jahr und das OAuth2-Token aktualisiert sich selbst, also ist dies ungefähr eine jährliche Aufgabe. Behandeln Sie ~/.garth als Anmeldeinformation: Jeder, der es besitzt, kann Ihr gesamtes Garmin-Konto lesen.
Testen Sie die Werkzeuge direkt, bevor Sie Claude einbeziehen. Ein Fehler hier ist ein Authentifizierungs- oder Endpunktproblem und kein MCP-Problem, und es ist viel schneller, auf dieser Ebene zu debuggen als über die Desktop-Protokolle:
cd garmin-mcp-public
uv run python -c "import server; print(server.list_runs(3))"
uv run python -c "import server; print(server.list_strength(3))"
uv run python -c "import server; print(server.daily_calories(7))"Finden Sie die beiden absoluten Pfade, die die Konfiguration benötigt:
cd garmin-mcp-public
which uv
pwdErstellen oder bearbeiten Sie die Konfigurationsdatei von Claude Desktop und fügen Sie den folgenden Block ein, wobei Sie die beiden Pfade durch die Ausgabe von Schritt 5 ersetzen. Durch das Einfügen Ihrer tatsächlichen Pfade werden auch beide Instanzen von
YOUR_USERNAMEentfernt. Die Datei befindet sich unter~/Library/Application Support/Claude/claude_desktop_config.jsonauf macOS und%APPDATA%\Claude\claude_desktop_config.jsonauf Windows; unter der Linux-Beta finden Sie die aktuelle Position in der Claude Desktop-Dokumentation von Anthropic.
{
"mcpServers": {
"garmin": {
"command": "/Users/YOUR_USERNAME/.local/bin/uv",
"args": ["--directory", "/Users/YOUR_USERNAME/path/to/garmin-mcp-public",
"run", "server.py"]
}
}
}Beide Pfade müssen absolut sein. Desktop startet den Server mit einem minimalen PATH, sodass ein bloßes uv fehlschlägt, obwohl es in Ihrer Shell funktioniert. Wenn Sie bereits andere Server konfiguriert haben, fügen Sie den garmin-Eintrag neben ihnen hinzu, anstatt das Objekt zu ersetzen. Wenn Sie diese Datei in TextEdit bearbeiten, schalten Sie zuerst die intelligenten Anführungszeichen aus: geschweifte Anführungszeichen sind ungültiges JSON.
Beenden Sie Claude Desktop vollständig (Cmd-Q, nicht nur das Fenster schließen) und öffnen Sie es erneut. Die Konfiguration wird nur beim Start gelesen. Fragen Sie dann etwas wie „Zeig mir meine letzten fünf Läufe und meinen Kalorienverbrauch diese Woche“ und bestätigen Sie die Tool-Aufrufe.
Falls es nicht funktioniert
Validieren Sie zuerst das JSON, dann lesen Sie den stderr des Servers. Diese Pfade sind die macOS-Pfade; passen Sie sie für Ihre Plattform an:
cd garmin-mcp-public
uv run python -m json.tool ~/Library/Application\ Support/Claude/claude_desktop_config.json
tail -50 ~/Library/Logs/Claude/mcp-server-garmin.logFehler bei jedem Aufruf bedeuten in der Regel, dass die Token abgelaufen sind: führen Sie auth_setup.py erneut aus. Der Dialog „Benutzerdefinierten Connector hinzufügen“ in Claude ist hier nicht relevant, da er eine entfernte HTTPS-URL erwartet.
Hinweise für Erweiterungen
Die Connect-API von Garmin ist undokumentiert und ihre Feldnamen ändern sich, daher sollten Sie, wenn etwas leer zurückkommt, ein reales Objekt untersuchen, anstatt zu raten. Speichern Sie dies als probe.py im Repository und führen Sie es mit uv run probe.py aus, anstatt es in eine Shell einzufügen:
import garth
garth.resume("~/.garth")
a = garth.connectapi(
"/activitylist-service/activities/search/activities",
params={"start": 0, "limit": 1},
)[0]
print(sorted(a))Zwei Verhaltensweisen, die Sie kennen sollten, bevor Sie ein Werkzeug hinzufügen. Der activityType-Filter akzeptiert nur übergeordnete Kategorien: running funktioniert und schließt stillschweigend treadmill_running ein, während strength_training HTTP 400 zurückgibt und als fitness_equipment angefordert und dann in Python gefiltert werden muss. Und jede Aktivität hat etwa hundert Felder, daher sollten Sie sie auf die wenigen reduzieren, die Sie benötigen: Das Zurückgeben von rohem Garmin-JSON überflutet den Kontextfenster bei jedem Aufruf.
Halten Sie die Anzahl der Werkzeuge aus demselben Grund klein. Drei fokussierte Werkzeuge mit beschreibenden Docstrings funktionieren besser als ein Dutzend vage, weil die Docstrings das sind, was Claude liest, wenn es entscheidet, welches Werkzeug aufgerufen werden soll.
MIT-lizenziert.
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
- Alicense-qualityDmaintenanceAn MCP server that gives Claude access to your Garmin Connect fitness and health data, including steps, sleep, activities, heart rate, and more.1MIT
- Flicense-qualityCmaintenanceA local, read-only MCP server that allows Claude Desktop to access Garmin Connect data such as activities and recovery metrics, enabling AI-assisted running plan creation and adjustment.
- AlicenseAqualityBmaintenanceA read-only MCP server that gives Claude Desktop access to your Garmin Connect data — daily health metrics, sleep, activities, training status, and body composition.6MIT
- AlicenseAqualityBmaintenanceLocal MCP server that connects Claude Desktop with Garmin and Apple Health data to read training and recovery, estimate heart rate and pace zones, analyze performance, and create structured workouts.22MIT
Related MCP Connectors
Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.
MCP server for Withings health data — sleep, activity, heart, and body metrics.
Garmin data in Claude: 135 tools — activities, sleep, HRV, training, workouts. Free, open source.
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/SuvirRathore/garmin-mcp-public'
If you have feedback or need assistance with the MCP directory API, please join our Discord server