Skip to main content
Glama
ChanJiraphat

Garmin MCP Server

by ChanJiraphat

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-Datenget_run_analysis aggregiert Umfang, gewichtetes Tempo, Herzfrequenz, Kadenz, Höhenmeter, Trainingsbelastung und Wochenentwicklung über einen Datumsbereich; get_activity_detail dringt 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-ModusGARMIN_MOCK=true liefert deterministische synthetische Daten, damit du die gesamte Pipeline testen kannst, bevor du ein echtes Konto verbindest.

  • Built-in DeepSeek bridgescripts/deepseek_chat.py gibt 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_PASSWORD

Einmalig anmelden (interaktiv, verarbeitet MFA)

.venv/bin/python -m garmin_mcp.login_cli --verify

Dieses 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.py

Startet 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 8000

DeepSeek 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 port

Es 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_KEY hinzu). 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

get_health_snapshot(date)

Komplette Tageszusammenfassung: Schlaf, Herz, SF, Stress, SOWasser – Info, Verhalten.

get_daily_summary(date)

Schritt/Ziel, Distanz, Kalorien, Etagen, Infensität, Herz, Stress, SOWinder bei, Atmung

get_steps(date) / get_heart_rate(date) / get_stress(date) / get_body_battery(date)

Tagesreihen mit Stundenwerten –

get_sleep(date)

Dauer, Scöre und Qualifier, Phasendetails, Schlaf-SpO2

get_hrv(date)

Letzte Nacht (Durchschnitt¼/hoch), Wochtendurchschnitt, Statius – HRV– Trender

get_resting_heart_rate(tart, end)

Tägliche Ruhereihe über Zeitraum

get_health_series(start, end)

Tägliche Zeile pro Datum (Ruhepuls, Bodattery, SchleeP, HVR, Schritte, Tube) + wöchlicher Stres – Energie für Daashboard

get_ctivities(start, end, activity_type?)

Listen aller Läufe und Aktivitäten mit Tempo, HR, Kadenz, TG (Training–Effekt) Und Belastung, VO2max

get_activity_detail(activity_id)

Eine einzelne Aktivität + Details je Runde

get_run_analysis(start, end)

Zusammenfassung für Coach: Umfang, Gewichtes Tempo, Wochenzahlen, Liste aller Läufe

get_training_status(date) / get_training_readness(date)

Garmin Trainingsload/-status, Morgenbereitschaft- und SubScores

get_fitness_metrics()

VO2max, Rennprognosen, Lathlet-Schwelle, Herzfrequenzonen

get_body_composition(start, end)

Gewicht/BMI/BMI/Körperfet/Muskel/Knochen/Wasser-Verlauf über Liefer

get_personal_records() / get_profile()

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 garminconnect Bibliothek. 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 mit 0600).

  • Der Server cached Antworten für GARMIN_CACETTL Sekunden (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

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to access and query Garmin Connect health and fitness data, including sleep, HRV, training load, and activities, with an optional coaching plugin for personalized training plans.
    0
    4
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to query live Garmin Connect health and fitness data, including daily metrics, activities, sleep analysis, and trends via natural language.
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    Exposes personal Garmin Connect data to MCP-capable clients like Claude and Gemini. Enables querying daily stats, heart rate, sleep, activities, and managing workouts.
    16
    MIT

View all related MCP servers

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

View all MCP Connectors

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/ChanJiraphat/garmin_mcp_webapp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server