Garmin MCP Server
Garmin MCP Server
Ein MCP-Server, der deine Garmin Connect-Gesundheits- und Laufdaten als Tools bereitstellt – damit ein LLM wie DeepSeek deine Uhrdaten täglich analysieren und dich wie ein Lauf-/Gesundheitscoach coachen kann, der sich an deinen tatsächlichen Zahlen orientiert.
Garmin watch ──sync──▶ Garmin Connect ──▶ garmin-mcp (this server)
│ MCP tools (stdio / HTTP)
▼
DeepSeek (via scripts/deepseek_chat.py) or any MCP client
(Claude Desktop, Cherry Studio, Cursor, Claude Code, ...)Funktionen
Täglicher Gesundheitsüberblick – ein Aufruf liefert Schlaf (Dauer/Score/Phasen), Ruhepuls, HRV (letzte Nacht + Woche), Body Battery, Stress, SpO2, Atemfrequenz, Schritte, Kalorien, Intensitätsminuten, morgendliche Trainingsbereitschaft und Workouts des Tages.
Lauf-Coaching-Daten –
get_run_analysisaggregiert Umfang, gewichtetes Tempo, Herzfrequenz, Kadenz, Höhenmeter, Trainingsbelastung und Wochenentwicklung über einen Datumsbereich;get_activity_detaildringt in die Splits pro Runde vor.18 Tools – für tägliche Kennzahlen, Seriendaten, Aktivitäten, Trainingsstatus/-bereitschaft, VO2max, Rennprognosen, Laktatschwelle, Herzfrequenzzonen, Körperzusammensetzung, persönliche Rekorde und Profil.
Tokenbasierte Authentifizierung – einmalige Anmeldung (MFA-fähig) und Sitzung wird auf der Festplatte gespeichert; der Server wird automatisch fortgesetzt, keine Passwortabfragen.
Mock-Modus –
GARMIN_MOCK=trueliefert deterministische synthetische Daten, damit du die gesamte Pipeline testen kannst, bevor du ein echtes Konto verbindest.Built-in DeepSeek bridge –
scripts/deepseek_chat.pygibt DeepSeek die Werkzeuge direkt (funktionsaufruf) – interaktiv oder one-shot für Cron.
Related MCP server: Garmin Workouts MCP Server
Anforderungen
Python 3.10+ (entwicklung auf 3.13)
Ein Garmin Connect-Konto (kostenlos). Konten mit Zwei-Faktor-Authentifizierung werden unterstützt.
Setup
cd /Users/jai/Documents/garmin_mcp_app
# 1. Create the virtualenv and install dependencies
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
# 2. Configure credentials
cp .env.example .env # then edit .env: GARMIN_EMAIL, GARMIN_PASSWORDEinmalig anmelden (interaktiv, verarbeitet MFA)
.venv/bin/python -m garmin_mcp.login_cli --verifyDieses forcaut den bei Garmin Connect an, frägt bei Zwei-Faktor-Konten nach dem Einmal-Code (MFA), speichert die OAuth-Tokens unter ~hap/garminconnect (nur für den Besitizer lebbar) und ziet einige echte Datenpunkte, um den/funktonsfähigkeit zu bestätigen. Danach bacht der Server kein Passwort mehr.
Fehlerbehebung Anmelden: Garmin scheist manchmal eine Bot-/Captcha-Upgabe. Lösung: Einmal bei connect.garmin.com im Communicator melden, dann das Startskript nocheinmal ausführen. Wenn du einge schränkt wirst (429), warte eine few Minuten, dann alte den Vorgang neu zu versuchen.
Testen ohne echtes Konto (Mock-Modus)
GARMIN_MOCK=true .venv/bin/python scripts/smoke_test.pyStartet den Server über stdio und übt mit einem MCP-Client jedes Werkzeug – 19 Prüfungen, alle distincts bestanden mit synt hetischen Daten.
Verbindung zu einem MCP-Client
Verweiene deinen Client auf das Startskript ./garmin-mcp-server (der findet die virtuelle Env und PYTHONPATH automatisch):
Claude Desktop – füge in claude_desktop_config.json ein (oder nimm das Beispiel in config/claude_desktop_config.example.json):
{
"mcpServers": {
"garmin": {
"command": "/Users/jai/Documents/garmin_mcp_app/garmin-mcp-server",
"type": "stdio"
}
}
}Beide wichtige: “Cherry Studio”:
Cherry Studio (DeepSeek-freundliche Desktop-Chat): Settings → MCP-Server → Hinzufügen: Name garmin, Typ stdio, Befehl /Users/jai/Documents/garmin_mcp_app/garmin-mcp-server, und wähle den DeepSee–Provider als Modell. AnMeldedaten kompt aus der .env des Projekts, es sind keine Environment- Variablesn im Client nötig.
Claude Code / Cursor / Cline: mcp add garmin -- /Users/jai/Documents/garmin_mcp_app/garmin-mcp-server
MCP Inspector (Debugg): npx @modelcontextprotocol/inspector und beziehe sie auf das obige Befehl – oder den Server über HTTP starten:
./garmin-mcp-server --transport streamable-http --port 8000DeepSeek Direkt verbinden (optionale Brücke)
DeepSeek's chat API spricht "OpenAI-Stil Function-Caling"-Sprache, daher gibt es hier eine eingehende Brücke, die den Garmin-Server startet, DeepSeek bringtSeek die Tools bei und über lasseneSeek, was abfrragt wird:
.venv/bin/pip install -r requirements-deepseek.txt # adds 'openai'
# add DEEPSEEK_API_KEY to .env (see .env.example)
# interactive coach chat (uses prompts/coach.md as the system prompt)
.venv/bin/python scripts/deepseek_chat.py
# one-shot — cron-friendly ("daily analysis" job)
.venv/bin/python scripts/deepseek_chat.py --once "How was my recovery today? What should today's run be?"Schreibe deine eigene Coach-Persona in prompts/coach.md und übergib mit --system-prompt prompts/coach.md (dies ist die Standardeinstellung). Ein Startprompt ist enthalten.
Beacht: Die Web-/Chat-App von DeepSeek unterstützt selbst kein MCP; die obige Brücke ist der Weg zu hilfe, um DeepSeek zu Mail? eben. Jeder Client mit MCP (Claude Desktop, Cherry Studio, Cursor, Oracle Code) funktioniert auch mit deinem eigenen DeepSeek-API-Schlüssel.
Web‑App (Dashboard + Chat)
Ein Frontend für den Browser wird mitgeliefert – kein Client nötig:
.venv/bin/pip install -r requirements-web.txt # fastapi + uvicorn
./garmin-web # http://127.0.0.1:8080
./garmin-web --mock # try it with synthetic data
./garmin-web --port 9000 # different portEs zeigt:
Heute-Karten – Schlafensscore/dauer, HRV, Body-Battery, Ruhepuls, Stress, Schrittvs. Ziel, Trainingsbereitschaft, Workouts.
Diagramme (letzte 7/14/28 Tage) – Ruhepuls und HRV, Herzfrequenzvariabilität, Body-Battery, Stress, nach Woche, wöchentlich gelaufene Distanzen.
Tabelle der letzten Läufe – Distanz, Tempo, Herzfrequenz, Frequenz, Höhenmeter, Trainingseffekt, Belastung.
Coach-Chat-Bereich – Fragen in natürlicher Sprache; DeepSeek antwortet mit deinen Live-Garmin-Daten (füge
DEEPSEEK_API_KEYhinzu). Dashboards für.env– ohne Funktion, ohne.
Die Web-App hält für die gesamte Dauer eine MCP-Sitzung mit dem Garmin-Server geöffnet, sodass es dieselben Tools und dieselbe Authentifizierung wiederverwendet wie jeder andere Client. Die Diagramme nutzen das Chart.js CDN, der Browser benötigt dazu Internetverbindung.
Verfügbare Tools
Werkzeuge | Beschreibung |
| Komplette Tageszusammenfassung: Schlaf, Herz, SF, Stress, SOWasser – Info, Verhalten. |
| Schritt/Ziel, Distanz, Kalorien, Etagen, Infensität, Herz, Stress, SOWinder bei, Atmung |
| Tagesreihen mit Stundenwerten – |
| Dauer, Scöre und Qualifier, Phasendetails, Schlaf-SpO2 |
| Letzte Nacht (Durchschnitt¼/hoch), Wochtendurchschnitt, Statius – HRV– Trender |
| Tägliche Ruhereihe über Zeitraum |
| Tägliche Zeile pro Datum (Ruhepuls, Bodattery, SchleeP, HVR, Schritte, Tube) + wöchlicher Stres – Energie für Daashboard |
| Listen aller Läufe und Aktivitäten mit Tempo, HR, Kadenz, TG (Training–Effekt) Und Belastung, VO2max |
| Eine einzelne Aktivität + Details je Runde |
| Zusammenfassung für Coach: Umfang, Gewichtes Tempo, Wochenzahlen, Liste aller Läufe |
| Garmin Trainingsload/-status, Morgenbereitschaft- und SubScores |
| VO2max, Rennprognosen, Lathlet-Schwelle, Herzfrequenzonen |
| Gewicht/BMI/BMI/Körperfet/Muskel/Knochen/Wasser-Verlauf über Liefer |
| Persönliche Rekorde & Profile |
Alle Ausgaben sind JSON-Strings; bei Erfolg {"ok": true, ...}, bei Fehler {"ok": false, "error": ...}. Daten Datum format: YYYY-MM-DD (lokale Zeit).
Projektaufbau
src/garmin_mcp/
server.py MCP server (tools, transports, CLI)
garmin_client.py real Garmin Connect client (token resume, cache) + mock
formatters.py raw Garmin payloads → compact LLM-friendly JSON
config.py env / .env settings
login_cli.py one-time interactive login (MFA-capable)
deepseek.py shared DeepSeek ↔ MCP chat core (CLI + web app)
scripts/
smoke_test.py end-to-end MCP client test (mock by default)
deepseek_chat.py DeepSeek ↔ MCP bridge (interactive or --once)
web_app.py FastAPI backend for the web dashboard + chat
web/ frontend (index.html, app.js, style.css)
garmin-mcp-server executable launcher for MCP clients
garmin-web executable launcher for the web app
config/ Claude Desktop config example
prompts/coach.md your coach system prompt (edit me)Notizen & Hinweise
Verwendet Garmins unofizielle (Web-/Geräte-)Endpunkte über die Community
garminconnectBibliothek. Garmin kann diese jederzeit ändern; die Formatierer sind defensiv geschrieben, sodass fehlende Felder graceful fallback liefern.Token-Datei enthalten langlaufierte Refresh-Tokens – sie geheim halten (
~/.garminconnect, geschrieben mit0600).Der Server cached Antworten für
GARMIN_CACETTLSekunden (Standard 600), um Garmin nicht zu überlasten, wenn der LLM Fragen überlappen.Das Web-Dashboard-Diagramm lädt Chart.js von einem CDN – der Browser braucht für Diagramme Internet (Karten und Tabelle funktionieren offline weiter).
Nicht verbunden mit Garmin. Für den privaten Gebrauch.
Lizenz
MIT
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
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to access Garmin Connect activities, workouts, and workout templates for querying and creating workout plans.5MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to query live Garmin Connect health and fitness data, including daily metrics, activities, sleep analysis, and trends via natural language.MIT
- AlicenseBqualityCmaintenanceExposes personal Garmin Connect data to MCP-capable clients like Claude and Gemini. Enables querying daily stats, heart rate, sleep, activities, and managing workouts.16MIT
Related MCP Connectors
Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.
Garmin data in Claude: 135 tools — activities, sleep, HRV, training, workouts. Free, open source.
List, fetch, create, edit (replace), delete and schedule structured workouts on Garmin Connect (runn
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/ChanJiraphat/garmin_mcp_webapp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server