Garmin Connect MCP Server
Provides comprehensive access to Garmin Connect data including activity tracking, health metrics (heart rate, sleep, stress, Body Battery, HRV), workout management, device settings, body composition, training status, goals, challenges, personal records, and gear management through 94 tools.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Garmin Connect MCP Server show me my sleep data from last night"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Garmin Connect MCP Server
English | Italiano
Un server Model Context Protocol (MCP) che connette Claude Desktop a Garmin Connect, permettendo di interrogare in linguaggio naturale i tuoi dati di attività fisica, metriche di salute, sonno e altro ancora.
📦 Ultima release: v4.6.0 — bundle
.mcpbpronto da installare, con le note di rilascio, il file.sha256per verificarlo e l'SBOM in formato CycloneDX.📜 Cronologia delle versioni: tutte le modifiche dettagliate di ogni release — nuovi tool, correzioni, note di aggiornamento — sono nel CHANGELOG.
Strumenti
Il server espone 110 strumenti, raggruppati per argomento. I 26 contrassegnati con ✏️ scrivono sull'account Garmin; tutti gli altri leggono soltanto.
🏃 Attività
Elenco e ricerca
Strumento | Descrizione |
| Le attività più recenti in forma sintetica: nome, tipo, data, distanza, durata, velocità, FC, calorie, dislivello, passi ed effetto allenante. Con |
| Le attività in un intervallo di date, filtrabili per tipo e ordinabili, con la stessa sintesi. Ne elenca al massimo |
| Conta le attività, su tutto lo storico o in un intervallo di date |
| L'elenco dei tipi di attività riconosciuti da Garmin Connect |
Dettaglio di una singola attività
Strumento | Descrizione |
| Il dettaglio completo di un'attività: metriche di riepilogo, zone, dati GPS |
| Split e lap con passo, distanza e tempo di ciascuno |
| Split tipizzati, più dettagliati dei normali (boulder, forza, multisport) |
| Il tempo trascorso in ciascuna zona di frequenza cardiaca |
| I set di esercizi registrati in un'attività di forza |
| Le condizioni meteo durante l'attività |
| I commenti lasciati su un'attività (solo lettura: scriverli non è possibile via API, vedi Limitazioni note) |
Creazione e modifica
Strumento | Descrizione |
| Inserisce a mano un'attività: nome, tipo, inizio, durata; distanza e calorie opzionali |
| Carica un file di attività in formato FIT, GPX o TCX |
| Scarica un'attività in FIT, TCX, GPX, KML o CSV |
| Rinomina un'attività |
| Cambia il tipo di un'attività |
| Imposta la privacy: |
| Elimina un'attività. L'operazione non è reversibile |
Confronti e analisi di periodo
Strumento | Descrizione |
| Confronta da 2 a 5 attività: distanza, durata, velocità, FC, calorie, dislivello, passi, training effect |
| Cerca attività simili per tipo, distanza e durata (tolleranza 20%), dalla più simile; |
| Analisi di trend, volumi e ricorrenze di allenamento su un intervallo di date |
| Aggrega i progressi fra due date su |
| Statistiche aggregate fra due date su |
❤️ Salute e benessere
Riepiloghi giornalieri
Strumento | Descrizione |
| Riepilogo compatto del giorno: passi e obiettivo, calorie, distanza, piani, minuti di intensità, FC a riposo/minima/massima, stress, Body Battery |
| Riepilogo utente di una data: passi, calorie, distanza, minuti attivi |
| Frequenza cardiaca e passi di una giornata in un'unica risposta |
Passi, piani e minuti di intensità
Strumento | Descrizione |
| Il totale dei passi di una data |
| La serie dettagliata dei passi della giornata, con gli orari |
| Passi giornalieri su un intervallo: oltre i 28 giorni la richiesta viene spezzata automaticamente |
| Piani saliti e scesi; con |
| Minuti di intensità moderata e vigorosa, per una data o un intervallo, con totale e obiettivo settimanali |
Cuore e respiro
Strumento | Descrizione |
| Frequenza cardiaca della giornata: a riposo, massima e serie di valori |
| Frequenza cardiaca a riposo di un singolo giorno |
| Variabilità della frequenza cardiaca (HRV), indicatore di recupero |
| Frequenza respiratoria durante il giorno e durante il sonno |
| Saturazione di ossigeno nel sangue (SpO2) |
Stress ed energia
Strumento | Descrizione |
| Stress del giorno sulla scala 0-100: medio, massimo, minimo e secondi per fascia; con |
| Lo stress ora per ora: media, massimo e fascia di ogni ora, più i totali del giorno. Risponde a quando lo stress è salito, dove |
| Body Battery (0-100) su un intervallo di date, con i periodi di ricarica e di consumo |
| Gli eventi che hanno inciso sulla Body Battery di una data: sonno, attività, pisolini |
| Tutti gli eventi della giornata, comprese le attività rilevate automaticamente |
Sonno
Strumento | Descrizione |
| La notte: durata, fasi, punteggio e riepilogo. Le serie al minuto sono contate e non incluse; |
| Movimenti durante il sonno e momenti di irrequietezza |
Idratazione
Strumento | Descrizione |
| L'idratazione registrata in una data |
| Aggiunge millilitri all'idratazione del giorno; un valore negativo li sottrae |
Peso e composizione corporea
Strumento | Descrizione |
| Peso, BMI, grasso, massa muscolare e ossea su un periodo di |
| Le pesate registrate in un intervallo di date |
| Registra una pesata. Peso e grasso corporeo vengono conservati; acqua, muscolo e osso sono accettati ma Garmin li scarta su una pesata manuale |
| Elimina una pesata dal suo id ( |
Pressione sanguigna
Strumento | Descrizione |
| Le misurazioni di pressione in un intervallo di date, con la |
| Registra una misurazione: sistolica, diastolica, pulsazioni, data e ora |
| Elimina una misurazione: servono la data e la |
Salute femminile
Strumento | Descrizione |
| I dati del ciclo mestruale per una data |
| Il riepilogo del monitoraggio della gravidanza |
📈 Allenamento e performance
Stato di forma
Strumento | Descrizione |
| Stato di allenamento di una data: status e frase di feedback, VO2 max, trend, carico acuto e cronico, rapporto ACWR |
| Il punteggio di prontezza all'allenamento |
| L'Endurance Score calcolato sul carico recente |
| L'età fisica stimata da VO2 max e altre metriche |
| Le metriche di picco, VO2 max compreso |
| L'Hill Score, la resa in salita, su un intervallo di date |
| La performance condition di una data. Garmin la registra per attività, quindi di norma si legge da |
| I tempi di gara previsti su 5K, 10K, mezza e maratona |
Carico di allenamento
Strumento | Descrizione |
| Il bilanciamento mensile del carico (aerobico basso e alto, anaerobico) rispetto ai target. È una fotografia alla data finale, non un aggregato dell'intervallo |
| Il rapporto fra carico acuto e cronico, indicatore di rischio infortuni |
Workout
Strumento | Descrizione |
| L'elenco dei workout salvati |
| Il dettaglio di un singolo workout |
| Crea un workout strutturato con riscaldamento, intervalli e defaticamento. Sport ammessi: |
| Modifica nome, descrizione o struttura di un workout |
| Mette un workout in calendario a una data; restituisce l'id da usare per rimuoverlo |
| Toglie un workout dal calendario liberando la data, senza cancellare il workout |
| I workout in calendario in un intervallo di date, con l'id che serve a rimuoverli |
| Elimina un workout, dopo averlo tolto dal calendario dove fosse già programmato |
| Scarica un workout in formato FIT per sincronizzarlo sul dispositivo |
Piani e percorsi
Strumento | Descrizione |
| I piani di allenamento disponibili |
| Il dettaglio di un piano di allenamento |
| I percorsi salvati sull'account |
👟 Equipaggiamento
Equipaggiamento
Strumento | Descrizione |
| Tutto l'equipaggiamento con i rispettivi UUID, che servono a ogni altro tool gear |
| Le statistiche d'uso di un pezzo di equipaggiamento |
| Le attività in cui un pezzo di equipaggiamento è stato usato |
| Aggiorna nome, marca, modello e limite di distanza. |
| Elimina un pezzo di equipaggiamento. L'operazione non è reversibile |
| Associa un pezzo di equipaggiamento a un'attività |
| Toglie l'associazione fra equipaggiamento e attività |
Cataloghi Garmin
Strumento | Descrizione |
| I tipi di equipaggiamento previsti da Garmin (scarpe, bici, mazze da golf, altro) |
| Le marche riconosciute da Garmin, con la chiave da usare nel catalogo |
Collezioni
Strumento | Descrizione |
| Le collezioni, cioè i gruppi di equipaggiamento usati insieme |
| Il dettaglio di una collezione: equipaggiamento contenuto e tipi di attività associati |
| Crea una collezione: servono nome e data di primo utilizzo |
| Aggiorna nome, equipaggiamento e tipi di attività di una collezione (le liste vengono sostituite) |
| Elimina una collezione. L'equipaggiamento che conteneva resta |
🏅 Obiettivi, badge e sfide
Obiettivi e record
Strumento | Descrizione |
| Gli obiettivi impostati; senza |
| I record personali: categoria, valore, data e, quando c'è, l'attività in cui è stato stabilito |
Badge
Strumento | Descrizione |
| I badge conquistati con la data; |
| I badge conquistabili con categoria, difficoltà, punti e avanzamento; |
| I badge iniziati e non ancora completati |
Sfide
Strumento | Descrizione |
| Le sfide badge a cui ci si può iscrivere, senza paginazione |
| Le stesse sfide di |
| Le sfide badge non ancora completate |
| Lo storico delle sfide ad hoc |
| Le sfide virtuali in corso |
⚙️ Profilo, dispositivi e credenziali
Profilo
Strumento | Descrizione |
| Il profilo: nome visualizzato e i due id dell'account. |
| Chiede a Garmin di ricaricare i dati di una data: serve per le giornate vecchie che il servizio ha spostato fuori dalla cache |
Dispositivi
Strumento | Descrizione |
| I dispositivi Garmin registrati sull'account, con id, modello, seriale e firmware |
| Le impostazioni di un singolo dispositivo |
| Il dispositivo che ha caricato dati più di recente |
| Le sveglie configurate: orario, giorni di ripetizione e stato. Senza |
| Il dispositivo di allenamento primario e le priorità fra dispositivi |
Credenziali
Strumento | Descrizione |
| Salva email e password cifrate nel vault del sistema operativo e verifica subito l'accesso |
| Lo stato della configurazione: fonte attiva, archivio usato, sessione. Non restituisce mai la password |
| Cancella credenziali cifrate e token OAuth e chiude la sessione |
Related MCP server: garmin-mcp
Prerequisiti
Node.js 22.0 o superiore
npm 8.0 o superiore
Claude Desktop installato
Account Garmin Connect con credenziali valide
🚀 Installazione Rapida (Bundle Precompilato)
Passaggi:
Il vault del sistema operativo è già incluso. Dalla v4.3.2 il bundle porta con sé i binari di
keytarper ogni piattaforma (darwin-x64,darwin-arm64,win32-x64,win32-ia32,linux-x64,linux-arm64): non c'è niente da installare a parte l'estensione. Sulle architetture senza binario, e sulle sessioni Linux senza keyring attivo, la chiave finisce in un file protetto;check_credentialsdice quale dei due è in uso.
1. Scarica il bundle
Usa il browser oppure:
wget https://github.com/sedoglia/garmin-mcp-ts/releases/latest/download/garmin-mcp-ts.mcpb2. Verifica l'integrità
Verifica l'integrità (opzionale ma consigliato):
wget https://github.com/sedoglia/garmin-mcp-ts/releases/latest/download/garmin-mcp-ts.mcpb.sha256
sha256sum -c garmin-mcp-ts.mcpb.sha256Accanto al bundle ogni release pubblica anche garmin-mcp-ts.sbom.cdx.json, l'elenco
completo delle dipendenze contenute nel bundle: vedi
SBOM (Software Bill of Materials).
3. Installa l'estensione in Claude Desktop (Metodo Consigliato)
Installazione tramite Custom Desktop Extensions:
Apri Claude Desktop
Vai su Impostazioni (Settings)
Seleziona la scheda Estensioni (Extensions)
Clicca su Impostazioni Avanzate (Advanced settings) e trova la sezione Extension Developer
Clicca su "Installa Estensione..." (Install Extension…)
Seleziona il file
.mcpb(garmin-mcp-ts.mcpbscaricato al passaggio 1)Segui le indicazioni a schermo per completare l'installazione
Nota: Questo è il metodo più semplice e consigliato. L'estensione sarà automaticamente integrata in Claude Desktop senza necessità di configurazione manuale.
4. Configura le Credenziali Garmin
Durante l'installazione Claude Desktop mostra due campi, Garmin Email e Garmin Password: compilali con le credenziali del tuo account Garmin Connect. La password viene conservata nel vault nativo del sistema operativo (Windows Credential Manager, macOS Keychain, Linux Secret Service) e non viene mai scritta in chiaro.
Puoi rivedere o modificare i due campi in qualsiasi momento da Impostazioni → Estensioni → garmin-mcp-ts.
In alternativa, dalla chat: apri una nuova chat su Claude Desktop e scrivi:
Configura le credenziali di accesso per GarminRispondi al messaggio fornendo:
Utente: la tua email Garmin
Password: la tua password Garmin
Claude usa il tool setup_credentials, che cifra e salva le credenziali nel vault nativo
del sistema operativo e verifica subito l'accesso a Garmin Connect. Non serve riavviare.
Nota: Le credenziali NON verranno salvate in file di testo. Saranno sempre crittografate e gestite dal vault nativo del SO. Se hai compilato i campi dell'estensione, quei valori hanno la precedenza su quanto salvato da
setup_credentials: per cambiarli, modificali in Impostazioni → Estensioni.
Per verificare la configurazione in qualsiasi momento:
Controlla lo stato delle credenziali Garmin5. Riavvia Claude Desktop
Chiudi completamente l'applicazione
Riapri Claude Desktop
Verifica in Impostazioni → Sviluppatore lo stato della connessione ✅
🚀 Installazione (clonando il repository con GIT)
1. Clona il Repository
git clone https://github.com/sedoglia/garmin-mcp-ts.git
cd garmin-mcp-ts2. Installa le Dipendenze
npm installkeytar è una dipendenza opzionale: npm install lo compila o ne scarica il binario, e
il vault nativo del sistema operativo viene usato senza altri passaggi. Se quel passaggio
fallisce — è normale su una macchina senza toolchain di compilazione — il server ripiega
su un file protetto e continua a funzionare; npm run check-encryption dice quale dei due
è in uso.
3. Compila il Progetto
npm run build4. Configura le Credenziali Garmin (Metodo Sicuro - Raccomandato)
Esegui lo script di setup per configurare le credenziali in modo sicuro:
npm run setup-encryptionQuesto script:
Crea una directory sicura nella home dell'utente
Genera una chiave di encryption e la salva nel vault nativo del SO
Chiede email e password Garmin
Cripta e salva le credenziali in modo sicuro
Per verificare la configurazione:
npm run check-encryption4b. Metodo Alternativo (Legacy)
In alternativa, puoi creare un file .env nella root del progetto:
GARMIN_EMAIL=tua.email@esempio.com
GARMIN_PASSWORD=la_tua_password_garminNota sulla Sicurezza: Non commitare mai il file
.envnel controllo versione. È già incluso in.gitignore. Si consiglia di usare il metodo sicuro sopra descritto.
Configurazione di Claude Desktop
Posizione del File di Configurazione
Il file di configurazione di Claude Desktop si trova in:
Windows:
%APPDATA%\Claude\claude_desktop_config.jsonmacOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
Esempio di Configurazione
Aggiungi il server MCP Garmin al tuo claude_desktop_config.json:
{
"mcpServers": {
"garmin": {
"command": "node",
"args": ["C:\\percorso\\a\\garmin-mcp-ts\\dist\\index.js"]
}
}
}Per macOS/Linux:
{
"mcpServers": {
"garmin": {
"command": "node",
"args": ["/percorso/a/garmin-mcp-ts/dist/index.js"]
}
}
}Verifica della Configurazione
Riavvia Claude Desktop dopo aver salvato la configurazione
Cerca gli strumenti Garmin tra quelli disponibili (icona martello)
Prova a chiedere: "Quali sono le mie attività recenti su Garmin?"
Esempi di Utilizzo
Interrogare le Attività Recenti
"Mostrami le mie ultime 5 attività Garmin"
"Quali attività ho fatto questa settimana?"
Ottenere Metriche di Salute
"Quali sono le mie metriche di salute per oggi?"
"Quanti passi ho fatto ieri?"
Analisi del Sonno
"Come ho dormito la scorsa notte?"
"Mostrami i dati del sonno del 10 dicembre"
Gestione Workout
"Mostrami i miei workout pianificati"
"Scarica il mio ultimo workout"
Training Readiness
"Qual è il mio Training Readiness di oggi?"
"Mostrami il mio Endurance Score"
Progressi e Statistiche
"Quanti km ho corso questo mese?"
"Mostrami il sommario dei miei progressi dell'ultimo mese"
Health Metrics Avanzati
"Qual è stata la mia frequenza cardiaca a riposo oggi?"
"Mostrami gli eventi di tutto il giorno per stress e body battery"
Salute Femminile
"Come influisce il mio ciclo mestruale sulla mia performance di allenamento?"
"In base al mio ciclo, quale tipo di allenamento dovrei fare?"
Gestione Equipaggiamento
"Mostrami tutto il mio equipaggiamento Garmin"
"Quali tipi di equipaggiamento posso gestire?"
"Crea una collezione 'Scarpe Running' e associala alle attività di corsa"
"Mostrami le mie collezioni di equipaggiamento"
Commenti e Privacy
"Mostrami i commenti sulla mia ultima attività"
"Imposta la mia ultima corsa come privata"
Metriche Training Avanzate
"Come sta andando il mio carico di allenamento questo mese?"
"Qual è il mio rapporto acuto/cronico? Sono a rischio infortuni?"
Analisi Attività
"Confronta le mie ultime 3 corse"
"Trova attività simili alla mia corsa di domenica scorsa"
"Analizza il mio allenamento dell'ultimo mese"
Test
Esegui i test con dati reali:
npm testLo script esercita 91 dei 110 tool contro il tuo account Garmin: tutti quelli di sola lettura, più il ciclo di vita completo di un workout (crea → modifica → schedula → togli dal calendario → elimina) e quello di una collezione gear. Restano fuori i tre tool delle credenziali e i tool che scrivono altri dati sull'account — pesate, pressione, idratazione, attività manuali, upload, modifiche all'equipaggiamento — che vanno provati a mano su dati che sei disposto a perdere.
Architettura
garmin-mcp-ts/
├── src/
│ ├── index.ts # Punto di ingresso, gestione stdout/stderr
│ ├── garmin/
│ │ ├── client.ts # Client API Garmin Connect (~3700 righe)
│ │ ├── auth.ts # Login, sessione e rinnovo dei token OAuth
│ │ └── simple-login.ts # Utility standalone per provare il login
│ ├── mcp/
│ │ ├── server.ts # Setup server MCP e gestori richieste
│ │ ├── tools.ts # Definizioni strumenti e schemi (110 tool)
│ │ └── handlers.ts # Logica implementazione strumenti
│ ├── utils/
│ │ ├── constants.ts # Costanti dell'applicazione, nomi dei tool compresi
│ │ ├── credentials.ts # Risoluzione delle credenziali fra estensione, vault e .env
│ │ ├── errors.ts # Classi di errore personalizzate
│ │ ├── logger.ts # Utility di logging (solo stderr)
│ │ ├── stdio-guard.ts # Impedisce ad altro codice di scrivere su stdout e rompere il protocollo
│ │ └── secure-storage.ts # Storage cifrato e accesso al vault del SO
│ ├── test-tools.ts # Suite che esercita i tool su un account reale (npm test)
│ └── test-oauth.ts # Diagnostica del flusso OAuth
├── scripts/
│ ├── setup-encryption.ts # Script interattivo per setup credenziali
│ ├── check-encryption.ts # Script diagnostico per verificare encryption
│ ├── sync-manifest.ts # Rigenera e verifica manifest.json dal codice
│ ├── fetch-keytar-prebuilds.mjs # Scarica i binari keytar di tutte le piattaforme
│ └── test-keytar.ts # Script diagnostico per testare l'integrazione con Keytar
├── vendor/keytar/ # Binari keytar per piattaforma, inclusi nel bundle
├── dist/ # Output JavaScript compilato
├── manifest.json # Manifest MCPB del bundle (generato in parte da sync-manifest)
├── PRIVACY.md # Privacy policy referenziata dal manifest
├── CHANGELOG.md # Cronologia delle versioni (CHANGELOG_EN.md in inglese)
├── package.json
└── tsconfig.json📦 Costruire il bundle .mcpb
Il bundle pubblicato viene costruito dal workflow Release, che allega .mcpb,
.sha256 e l'SBOM CycloneDX a una release in bozza. Si attiva in due modi:
dal tag:
git tag v4.3.1 && git push origin v4.3.1;a mano: Actions → Release → Run workflow, indicando il tag da pubblicare. Se non esiste ancora, il workflow lo crea dal ramo selezionato; se esiste, costruisce quello che il tag contiene.
La release nasce in bozza. La casella publish la pubblica: lanciando di nuovo il workflow sullo stesso tag con quella casella spuntata, la bozza esistente viene pubblicata senza toccarne gli allegati.
Pubblicata la release, riporta in locale quello che gli utenti scaricano:
npm run fetch:release # l'ultima release pubblicata
npm run fetch:release -- v4.6.0 # un tag precisoGli allegati finiscono in releases/ (ignorata da git), presi dalla release stessa e non
da un pack locale, e il .mcpb viene verificato contro il suo .sha256. È il file da
inviare alla directory MCP o da aprire in Claude Desktop per provare la build spedita;
lo script vede solo le release pubblicate, una bozza non conta.
Le note della release stanno in .github/release-notes/<tag>.md. Se il file esiste il
workflow lo usa come testo della release, altrimenti ripiega sull'elenco automatico delle
pull request. Per correggere il testo di una release già pubblicata basta modificare il
file e rilanciare il workflow: gli allegati non vengono toccati.
In entrambi i casi il workflow rifiuta di procedere se il tag non corrisponde alla
versione dichiarata nel manifest. La versione è dichiarata in cinque punti, che vanno
alzati insieme prima di taggare: package.json, manifest.json, SERVER_VERSION in
src/utils/constants.ts (è quella che il server annuncia nell'handshake MCP) e, in
entrambi i README, il badge e la riga della release qui sopra. I link di download puntano
invece a releases/latest e non vanno mai toccati. Alzata la versione, rigenera anche
l'SBOM con npm run sbom: il componente radice ne riporta il numero, e check:sbom
fallirebbe in CI.
Per costruire il bundle in locale:
npm ci
npm run pack # build + controllo manifest + validazione + packIl bundle esce nella radice del repository come garmin-mcp-ts.mcpb, con il suo .sha256
accanto, ed è lo stesso che pubblica la release. mcpb pack archivia node_modules così
come lo trova, quindi impacchettare l'albero di sviluppo direttamente ci infilerebbe anche
TypeScript, tsx ed esbuild: una quindicina di MB che nessun utente carica mai. Per evitarlo
scripts/pack.mjs copia in una directory temporanea le sole dipendenze di produzione — le
stesse che il workflow installa con npm ci --omit=dev — e impacchetta quella.
Se cambi, aggiungi o rimuovi un tool, rigenera l'elenco dichiarato nel manifest:
npm run sync:manifestnpm run check:manifest fa fallire la CI quando manifest e codice divergono: la directory
MCP legge il manifest e la risposta di tools/list, e un disallineamento fra i due si
scopre altrimenti solo in fase di review.
📋 SBOM (Software Bill of Materials)
Un SBOM è l'inventario formale di tutto ciò che compone un software: ogni dipendenza, diretta e transitiva, con versione, licenza e provenienza. Serve a rispondere in fretta a domande come «questa release contiene la libreria X nella versione vulnerabile?» senza dover ricostruire l'albero delle dipendenze a mano. GitHub ne dà una buona introduzione in What is an SBOM?.
Questo progetto pubblica il proprio SBOM in formato CycloneDX 1.6 (JSON), lo standard OWASP / ECMA-424 letto dalla maggior parte degli strumenti di analisi:
sbom.cdx.jsonnella radice del repository, che descrive il ramomaincorrente;garmin-mcp-ts.sbom.cdx.jsonallegato a ogni release, che descrive esattamente il bundle pubblicato accanto:wget https://github.com/sedoglia/garmin-mcp-ts/releases/latest/download/garmin-mcp-ts.sbom.cdx.json
L'SBOM elenca le sole dipendenze che finiscono nel bundle .mcpb — quelle di produzione,
più keytar che è opzionale — risolte da package-lock.json. Per ogni componente riporta
nome, versione, licenza dichiarata, Package URL
(pkg:npm/axios@1.20.0) e l'hash SHA-512 del tarball npm; la sezione dependencies
conserva l'albero, così si vede da quale dipendenza diretta arriva ciascuna transitiva. Le
dipendenze di sviluppo (TypeScript, tsx, il packer, il generatore stesso) non compaiono,
per la stessa ragione per cui non sono nel bundle: nessun utente le carica.
Il file è generato con @cyclonedx/cyclonedx-npm
in modalità riproducibile: niente numero di serie né timestamp, quindi cambia solo quando
cambia una dipendenza. Si rigenera con:
npm run sbomnpm run check:sbom fa fallire la CI quando sbom.cdx.json non corrisponde più al
lockfile, esattamente come check:manifest per il manifest; anche il workflow di release
lo verifica prima di allegarlo.
Per interrogarlo, qualunque strumento che legga CycloneDX va bene. Due esempi con scanner
di vulnerabilità che lavorano direttamente sull'SBOM, senza bisogno di node_modules:
grype sbom:sbom.cdx.jsontrivy sbom sbom.cdx.json🔐 Architettura di Sicurezza
Il sistema di sicurezza utilizza un'architettura a due livelli per proteggere le credenziali:
Dove vengono salvati i dati
Sistema Operativo | Chiave di Encryption | Dati Criptati |
Windows | Windows Credential Manager |
|
macOS | Keychain (Face ID/Touch ID) |
|
Linux | Secret Service (D-Bus/GNOME) |
|
Come funziona
Chiave di Encryption: Una chiave AES-256 viene generata alla prima esecuzione e salvata nel vault nativo del SO
Credenziali: Email e password vengono cifrate con AES-256-GCM e salvate in
garmin-credentials.encToken OAuth: I token vengono cifrati e salvati in
garmin-tokens.encper riutilizzo sessione
Perché è sicuro
La chiave non è mai su disco in chiaro: È nel vault hardware/software del SO
Se il repository viene esposto: I dati rimangono inutili senza la chiave
Se il PC viene clonato: I dati sono inaccessibili (la chiave rimane nel vault dell'utente originale)
Encryption forte: AES-256-GCM con IV casuale per ogni operazione
Fallback
Se keytar non è disponibile (vault nativo), il sistema usa un file .encryption.key con permessi ristretti (0o600) nella directory dati.
Verifica stato encryption
Per verificare lo stato completo dell'encryption e keytar:
npm run check-encryptionPer testare l'integrazione con keytar:
npm run test-keytar⚠️ Limitazioni Note
Limitazioni API Garmin OAuth
Alcuni endpoint e funzionalità non sono disponibili tramite l'API OAuth pubblica di Garmin:
Commenti alle Attività
✅ Lettura commenti (
get_activity_comments): Funzionante❌ Scrittura commenti (
add_activity_comment): NON SUPPORTATO dall'API OAuthI commenti possono essere aggiunti solo tramite:
Web interface di Garmin Connect
App mobile Garmin Connect
NON disponibile via API OAuth
Privacy Attività
✅ Impostare privacy (
set_activity_privacy): Funzionante✅
public: Funziona correttamente✅
private: Funziona correttamente✅
subscribers: Funziona correttamente (è "solo connessioni" in Garmin Connect)❌
followers: NON SUPPORTATO - non è una chiave valida, restituisce 400. La chiave corretta èsubscribers
Il livello attuale si legge da
accessControlRuleDTOinget_activity_details: leggerlo prima di modificarlo evita di sovrascriveresubscribersconpublic.
Gear Management
✅ Lista gear (
get_all_gear): Funzionante (via endpointfilterGear)✅ Aggiorna/elimina gear (
update_gear,delete_gear): Funzionante (update_gearera rotto fino alla v4.5.3)❌ Creazione gear (
create_gear): NON DISPONIBILE - l'endpoint esiste ma il suo payload non è documentato: risponde 500 senza indicare quale campo rifiutiI gear possono essere creati solo tramite:
Web interface di Garmin Connect
App mobile Garmin Connect
✅ Collezioni gear (CRUD completo): Funzionante
Metriche Avanzate (Dipende dal Dispositivo)
Alcune metriche potrebbero non essere disponibili a seconda del modello di smartwatch:
Metrica | Dispositivi Supportati | Note |
| Solo dispositivi premium (Fenix 7+, Forerunner 955+) | Non disponibile su Instinct 2 Solar |
| Richiede rilevazione HRV notturna | Assente se il dispositivo non registra l'HRV |
| Richiede barometro | Assente sui dispositivi senza altimetro barometrico |
| Tutti i dispositivi | — |
| Richiede 7+ giorni di dati | Snapshot alla data richiesta, non un aggregato del range |
| Richiede 4+ settimane consecutive | Calcolato su storico esteso |
| Durante attività | Garmin non la espone come metrica giornaliera: usare |
Nota: Alcune metriche sono visibili nell'app Garmin Connect ma potrebbero non essere esposte tramite API OAuth.
Risoluzione dei Problemi
Problemi Comuni
Autenticazione Fallita
Verifica che le tue credenziali Garmin siano corrette
Controlla di poter accedere manualmente a connect.garmin.com
Assicurati che non ci siano caratteri speciali nella password che potrebbero richiedere escape
Rate Limiting (Errore 429)
Garmin potrebbe bloccare temporaneamente le richieste se ne vengono fatte troppe in un breve periodo. Attendi qualche minuto e riprova.
Il Server Non Appare in Claude Desktop
Controlla che il percorso a
dist/index.jssia corretto e assolutoVerifica che la sintassi del JSON di configurazione sia valida
Riavvia completamente Claude Desktop
Controlla i log di Claude Desktop per eventuali errori
Visualizzare i Log
Il server produce informazioni diagnostiche su stderr. In Claude Desktop, controlla i log dell'applicazione:
Windows:
%APPDATA%\Claude\logs\macOS:
~/Library/Logs/Claude/
Crediti e Ringraziamenti
Questo progetto è stato ispirato e costruito sul lavoro di diversi progetti open-source:
Taxuspt/garmin_mcp - Implementazione originale Garmin MCP
matin/garth - Libreria di autenticazione Garmin
matin/garth-mcp-server - Server MCP basato su Garth
Async-IO/pierre_mcp_server - Pattern per server MCP
WillRaphaelson/garmin-mcp - Reference per API endpoints
Un ringraziamento speciale ai manutentori del pacchetto npm garmin-connect.
La storia completa del progetto, versione per versione, è nel CHANGELOG.
Contribuire
I contributi sono benvenuti! Sentiti libero di inviare una Pull Request.
Fai il fork del repository
Crea il tuo branch per la feature (
git checkout -b feature/FunzionalitàIncredibile)Committa le tue modifiche (
git commit -m 'Aggiunge una FunzionalitàIncredibile')Pusha il branch (
git push origin feature/FunzionalitàIncredibile)Apri una Pull Request
Licenza
Questo progetto è rilasciato sotto Licenza MIT - vedi il file LICENSE per i dettagli.
Privacy Policy
Questo progetto rispetta la tua privacy. Per informazioni complete su come vengono gestiti i tuoi dati, consulta la nostra Privacy Policy.
Riepilogo
Dati raccolti: Credenziali Garmin (email e password) e token OAuth
Archiviazione: Tutti i dati sono crittografati localmente con AES-256-GCM e salvati nel vault nativo del sistema operativo
Trasmissione: I dati vengono trasmessi solo ai server Garmin Connect per l'autenticazione e il recupero dei dati
Nessun server di terze parti: Non raccogliamo, non memorizziamo e non trasmettiamo i tuoi dati a server di terze parti
Controllo locale: Tutti i dati rimangono sul tuo dispositivo sotto il tuo controllo
Disclaimer
Questo progetto non è affiliato, approvato o connesso a Garmin Ltd. o alle sue sussidiarie. Garmin e Garmin Connect sono marchi registrati di Garmin Ltd.
Supporta lo Sviluppo
Se questo progetto ti è utile, considera di supportarlo con una donazione!
English | Italiano | Segnala Problemi
Available Tools
110 toolsadd_hydration_dataAdd Hydration DataBDestructive
Add hydration/water intake data in milliliters.
Inputs: valueInMl (required), date, timestamp.
add_weigh_inAdd Weigh-InADestructive
Add a new weigh-in record. Weight and body fat are stored; the water, muscle and bone percentages are accepted but Garmin discards them on a manual entry, keeping them only for measurements a smart scale uploads.
Inputs: date (required), weight (required), bodyFatPercent, boneMassPercent, +2 more.
analyze_training_periodAnalyze Training PeriodARead-only
Comprehensive analysis of training trends, volume, and patterns over a date range.
Inputs: endDate (required), startDate (required).
check_credentialsCheck Garmin CredentialsARead-only
Report whether Garmin credentials are configured, which source they come from, where the encrypted data is stored and whether the session is authenticated. Never returns the password.
Inputs: no named parameters.
clear_credentialsClear Garmin CredentialsADestructive
Delete the encrypted credentials and OAuth tokens from secure storage and end the current session. Credentials supplied through the extension settings are not affected and must be cleared there.
Inputs: no named parameters.
compare_activitiesCompare ActivitiesARead-only
Compare 2-5 activities side by side: distance, duration, speed, heart rate, calories, elevation, steps and training effect.
Inputs: activityIds (required).
count_activitiesCount ActivitiesARead-only
Count the activities in Garmin Connect, over the whole history or over a date range.
Inputs: endDate, startDate.
create_gear_collectionCreate Gear CollectionBDestructive
Create a new gear collection to group equipment used together (e.g., running kit, bike components). Requires a name and first use date.
Inputs: name (required), firstUseDate (required), activityTypes.
create_manual_activityCreate Manual ActivityCDestructive
Create a manual activity entry in Garmin Connect.
Inputs: duration (required), startTime (required), activityName (required), activityType (required), +3 more.
create_workoutCreate WorkoutADestructive
Create a new structured workout in Garmin Connect. Supports complex interval workouts with warmup, cooldown, and repeat blocks.
Example for interval running workout: { "workoutName": "5x3min Intervals", "sportType": "running", "description": "Interval training", "workoutSegments": [{ "segmentOrder": 1, "sportType": "running", "workoutSteps": [ { "stepOrder": 1, "stepType": "warmup", "endCondition": "time", "endConditionValue": 600 }, { "stepOrder": 2, "stepType": "interval", "endCondition": "time", "endConditionValue": 180, "targetType": "pace" }, { "stepOrder": 3, "stepType": "recovery", "endCondition": "time", "endConditionValue": 120 }, { "stepOrder": 4, "stepType": "cooldown", "endCondition": "time", "endConditionValue": 600 } ] }] }
Inputs: sportType (required), workoutName (required), workoutSegments (required), description.
delete_activityDelete ActivityADestructive
Delete an activity from Garmin Connect. WARNING: This action cannot be undone.
Inputs: activityId (required).
delete_blood_pressureDelete Blood PressureADestructive
Delete a blood pressure reading. Use get_blood_pressure with the /all endpoint to find the version ID.
Inputs: date (required), version (required).
delete_gearDelete GearADestructive
Delete a piece of gear/equipment. WARNING: This cannot be undone.
Inputs: gearUUID (required).
delete_gear_collectionDelete Gear CollectionADestructive
Delete a gear collection. WARNING: This cannot be undone. The gear items in the collection will NOT be deleted.
Inputs: collectionUUID (required).
delete_weigh_inDelete Weigh-InADestructive
Permanently delete a single weigh-in record, identified by its weigh-in ID (the samplePk from get_weigh_ins or get_body_composition). The measurement cannot be recovered afterwards. Pass date when the weigh-in was back-dated to a day other than the one it was entered on.
Inputs: weighInId (required), date.
delete_workoutDelete WorkoutBDestructive
Delete a workout from Garmin Connect.
Inputs: workoutId (required).
download_activityDownload ActivityARead-only
Download an activity in various formats (FIT, TCX, GPX, KML, CSV).
Inputs: activityId (required), format.
download_workoutDownload WorkoutARead-only
Download a workout in FIT format for syncing to a Garmin device.
Inputs: workoutId (required).
find_similar_activitiesFind Similar ActivitiesARead-only
Find activities similar to a reference activity by type, distance and duration (within 20% tolerance). Returns the closest matches first, each with its full metrics and a similarity score.
Inputs: activityId (required), limit, searchDepth.
get_activities_by_dateGet Activities by DateARead-only
Get all activities within a date range, optionally filtered by type. Each one is summarised the same way list_recent_activities summarises them.
Inputs: startDate (required), limit, endDate, sortOrder, +2 more.
get_activity_commentsGet Activity CommentsBRead-only
Get all comments on an activity.
Inputs: activityId (required).
get_activity_detailsGet Activity DetailsARead-only
Get detailed information about a specific activity including splits, heart rate zones, and GPS data.
Inputs: activityId (required).
get_activity_exercise_setsGet Activity Exercise SetsARead-only
Get exercise sets from a strength training activity.
Inputs: activityId (required).
get_activity_hr_zonesGet Activity HR ZonesARead-only
Get time spent in each heart rate zone during an activity.
Inputs: activityId (required).
get_activity_splitsGet Activity SplitsARead-only
Get split/lap data for a specific activity including pace, distance, and time for each split.
Inputs: activityId (required).
get_activity_typed_splitsGet Activity Typed SplitsARead-only
Get typed splits for an activity (more detailed than regular splits, useful for bouldering, strength training, etc.).
Inputs: activityId (required).
get_activity_typesGet Activity TypesARead-only
Get all activity types available in Garmin Connect.
Inputs: no named parameters.
get_activity_weatherGet Activity WeatherCRead-only
Get weather conditions during an activity.
Inputs: activityId (required).
get_adhoc_challengesGet Ad-hoc ChallengesCRead-only
Get ad-hoc challenges history.
Inputs: no named parameters.
get_all_day_eventsGet All Day EventsARead-only
Get all daily events including auto-detected activities that may not have been recorded.
Inputs: date (required).
get_all_day_stressGet Stress by HourARead-only
Get the stress of a day hour by hour: average, maximum and stress band for each hour, plus the totals for the day. Use this to see when stress rose or fell; use get_stress_data for the day as a whole, and its includeValues for the individual three-minute samples.
Inputs: date.
get_all_gearGet All GearARead-only
Get complete list of all gear/equipment with their UUIDs. This solves the UUID problem - you can now discover all gear without needing to manually find UUIDs in the web interface.
Inputs: no named parameters.
get_available_badge_challengesGet Available Badge ChallengesBRead-only
Get available badge challenges to join.
Inputs: limit, start.
get_available_badgesGet Available BadgesARead-only
Get all badges available to earn, as id, key, name, category, difficulty, points and, where set, the active window and progress. Set includeDetails for the full badge records.
Inputs: includeDetails.
get_badge_challengesGet Badge ChallengesBRead-only
Get available badge challenges.
Inputs: no named parameters.
get_blood_pressureGet Blood PressureARead-only
Get blood pressure readings for a date range.
Inputs: endDate (required), startDate (required).
get_body_batteryGet Body BatteryARead-only
Get Body Battery energy level data for a date range. Body Battery tracks energy levels (0-100) throughout the day based on sleep, stress, and activity. Shows charged/drained periods and sleep quality impact.
Inputs: endDate, startDate.
get_body_battery_eventsGet Body Battery EventsARead-only
Get Body Battery events for a date (sleep, activities, naps that affected energy levels).
Inputs: date (required).
get_body_compositionGet Body CompositionARead-only
Get body composition measurements (weight, BMI, body fat, muscle and bone mass) over a period, plus the average across the period.
Inputs: days, endDate.
get_coursesGet CoursesARead-only
Get saved routes/courses from Garmin Connect.
Inputs: limit, start.
get_daily_stepsGet Daily StepsARead-only
Get daily step counts for a date range (max 28 days per request, auto-chunked for longer ranges).
Inputs: endDate (required), startDate (required).
get_daily_summaryGet Daily SummaryARead-only
Get a compact daily summary: steps and goal, calories, distance, floors, intensity minutes, resting/min/max heart rate, stress, body battery and time breakdown. Use get_heart_rate for the full heart rate series.
Inputs: date.
get_device_alarmsGet Device AlarmsARead-only
Get the alarms configured on a Garmin device, with time, repeat days and whether each one is on. Without a deviceId every registered device is reported.
Inputs: deviceId.
get_device_last_usedGet Device Last UsedARead-only
Get the Garmin device that uploaded data most recently, with its id, name and upload time.
Inputs: no named parameters.
get_devicesGet DevicesARead-only
List the Garmin devices registered on the account with their id, model, serial and firmware version. Use get_device_settings for the configuration of a single device.
Inputs: no named parameters.
get_device_settingsGet Device SettingsARead-only
Get settings for a specific Garmin device.
Inputs: deviceId (required).
get_earned_badgesGet Earned BadgesARead-only
Get all badges earned by the user, as id, key, name, category, difficulty, points and the date earned. Set includeDetails for the full badge records.
Inputs: includeDetails.
get_endurance_scoreGet Endurance ScoreBRead-only
Get endurance score based on recent training load.
Inputs: date.
get_fitness_ageGet Fitness AgeARead-only
Get fitness age estimation based on VO2 max and other metrics.
Inputs: date.
get_fitness_statsGet Fitness StatsARead-only
Get aggregated fitness statistics between two dates.
Inputs: endDate (required), startDate (required), metric, groupByActivities.
get_floorsGet FloorsARead-only
Get the floors climbed and descended on a date. Returns the daily totals; set includeBreakdown to also get the 96 quarter-hour intervals behind them.
Inputs: date, includeBreakdown.
get_gear_activitiesGet Gear ActivitiesBRead-only
Get activities where a specific piece of gear was used. Note: Requires the gear UUID from Garmin Connect web interface.
Inputs: gearUUID (required), limit.
get_gear_collectionGet Gear Collection DetailsARead-only
Get detailed information about a specific gear collection, including the gear items in the collection and associated activity types.
Inputs: collectionUUID (required).
get_gear_collectionsGet Gear CollectionsARead-only
Get all gear collections. Collections group gear items that are used together (e.g., running kit, bike components).
Inputs: no named parameters.
get_gear_makesGet Gear MakesARead-only
Get all available gear brands/makes (e.g., Nike, Adidas, ASICS, Brooks). Returns make names and primary keys.
Inputs: no named parameters.
get_gear_statsGet Gear StatsARead-only
Get usage statistics for a specific piece of gear. Note: Requires the gear UUID which can be found in Garmin Connect web interface URL.
Inputs: gearUUID (required).
get_gear_typesGet Gear TypesARead-only
Get all available gear/equipment types (e.g., Shoes, Bike, Golf Clubs, Other). Returns type names and primary keys used when creating gear.
Inputs: no named parameters.
get_goalsGet GoalsARead-only
Get user goals. Without a status every status is queried in turn and the results are merged, each goal carrying the status it was found under.
Inputs: status.
get_health_metricsGet Health MetricsARead-only
Get daily health metrics including heart rate data and step count for a specific date.
Inputs: date.
get_heart_rateGet Heart RateARead-only
Get detailed heart rate data for a specific date including resting HR, max HR, and HR zones.
Inputs: date.
get_hill_scoreGet Hill ScoreBRead-only
Get hill score data indicating climbing/vertical performance.
Inputs: startDate (required), endDate.
get_hrv_dataGet HRV DataARead-only
Get Heart Rate Variability (HRV) data for a specific date. HRV measures the variation in time between heartbeats, indicating recovery and stress levels.
Inputs: date.
get_hydrationGet HydrationARead-only
Get daily hydration/water intake data for a specific date.
Inputs: date.
get_in_progress_badgesGet In-Progress BadgesARead-only
Get badges that are currently in progress (started but not completed).
Inputs: no named parameters.
get_in_progress_virtual_challengesGet In-Progress Virtual ChallengesARead-only
Get virtual challenges that are currently in progress.
Inputs: limit, start.
get_intensity_minutesGet Intensity MinutesARead-only
Get intensity minutes (moderate and vigorous) for a date, or for a date range when endDate is given, together with the weekly totals and goal.
Inputs: date, endDate.
get_load_ratioGet Load RatioBRead-only
Get acute/chronic workload ratio indicating training balance and injury risk.
Inputs: date (required).
get_max_metricsGet Max MetricsCRead-only
Get max metrics including VO2 max and related fitness data.
Inputs: date.
get_menstrual_dataGet Menstrual DataARead-only
Get menstrual cycle data for a specific date.
Inputs: date (required).
get_non_completed_badge_challengesGet Non-Completed Badge ChallengesARead-only
Get badge challenges that have not been completed yet.
Inputs: limit, start.
get_performance_conditionGet Performance ConditionARead-only
Get the performance condition score for a date. Garmin records this per activity rather than daily, so it is usually only available through get_activity_details.
Inputs: date (required).
get_personal_recordsGet Personal RecordsARead-only
Get all personal records (PRs). Each record carries a typeId identifying its category, its value, the date it was set and, for records set during an activity, that activity.
Inputs: no named parameters.
get_pregnancy_summaryGet Pregnancy SummaryBRead-only
Get pregnancy tracking summary/snapshot data.
Inputs: no named parameters.
get_primary_training_deviceGet Primary Training DeviceBRead-only
Get information about the primary training device and device priorities.
Inputs: no named parameters.
get_progress_summaryGet Progress SummaryBRead-only
Get aggregated progress summary between two dates.
Inputs: endDate (required), startDate (required), metric.
get_race_predictionsGet Race PredictionsARead-only
Get predicted race times for 5K, 10K, half marathon, and marathon based on current fitness.
Inputs: no named parameters.
get_respiration_dataGet Respiration DataARead-only
Get respiration/breathing rate data for a specific date. Shows breaths per minute throughout the day and during sleep.
Inputs: date.
get_rhr_dayGet Resting Heart RateCRead-only
Get resting heart rate for a specific day.
Inputs: date (required).
get_scheduled_workoutsGet Scheduled WorkoutsARead-only
List the workouts scheduled on the Garmin calendar in a date range, with the workoutScheduleId needed to unschedule them. Defaults to the next 12 months.
Inputs: endDate, startDate.
get_sleep_dataGet Sleep DataARead-only
Get a night of sleep: duration, sleep stages, quality score and the nightly summary. The per-minute series behind it (movement, heart rate, stress, body battery, HRV, respiration) are reported as counts only; set includeTimeSeries to inline them, or use the dedicated tool for the one series you need.
Inputs: date, includeTimeSeries.
get_sleep_movementGet Sleep MovementBRead-only
Get movement data during sleep including restless moments.
Inputs: date (required).
get_spo2_dataGet SpO2 DataARead-only
Get SpO2 (blood oxygen saturation) data for a specific date. Shows pulse oximetry readings as percentage (typically 95-100% is normal).
Inputs: date.
get_stepsGet StepsBRead-only
Get step count for a specific date. Returns the total number of steps recorded.
Inputs: date.
get_steps_dataGet Steps DataARead-only
Get detailed step data chart for a specific date with timestamps.
Inputs: date (required).
get_stress_dataGet Stress DataARead-only
Get stress for a date on the 0-100 scale (0-25 resting, 26-50 low, 51-75 medium, 76-100 high). Returns average/max/min and the seconds spent in each band; set includeValues to also get the ~460 three-minute samples. The average and maximum are the day figures Garmin itself reports, so they match the Connect app; the minimum and the band seconds are derived from the samples. Use get_all_day_stress for the same day broken down hour by hour.
Inputs: date, includeValues.
get_training_loadGet Training LoadARead-only
Get the monthly training load balance (low aerobic, high aerobic, anaerobic) against its target ranges. This is a snapshot taken on endDate, not an aggregate over the range.
Inputs: startDate (required), endDate.
get_training_plan_by_idGet Training Plan by IDBRead-only
Get detailed information about a specific training plan.
Inputs: planId (required).
get_training_plansGet Training PlansBRead-only
Get all available training plans.
Inputs: no named parameters.
get_training_readinessGet Training ReadinessBRead-only
Get training readiness score indicating how prepared your body is for training.
Inputs: date.
get_training_statusGet Training StatusARead-only
Get the training status for a date: status and feedback phrase, VO2 max, fitness trend, acute and chronic training load and the acute/chronic workload ratio.
Inputs: date.
get_user_profileGet User ProfileARead-only
Get user profile information: display name, user name, full name and both account ids. profileId is the one other Garmin data is keyed by (the ownerId on an activity, the userProfilePK on wellness records); id is a separate internal identifier.
Inputs: no named parameters.
get_user_summaryGet User SummaryBRead-only
Get comprehensive user activity summary for a specific date including steps, calories, distance, active minutes, and more.
Inputs: date (required).
get_weigh_insGet Weigh-InsARead-only
Get weigh-in records for a date range.
Inputs: endDate (required), startDate (required).
get_workout_by_idGet Workout by IDARead-only
Get detailed information about a specific workout by its ID.
Inputs: workoutId (required).
get_workoutsGet WorkoutsARead-only
Get list of scheduled/planned workouts from Garmin Connect.
Inputs: limit, start.
link_gear_to_activityLink Gear to ActivityADestructive
Link a piece of gear to an activity. Note: Requires the gear UUID which can be found in Garmin Connect web interface URL.
Inputs: gearUUID (required), activityId (required).
list_recent_activitiesList Recent ActivitiesARead-only
Get a list of recent activities from Garmin Connect. Each one is summarised: name, type, date, distance, duration, speed, heart rate, calories, elevation, steps and training effect. Use get_activity_details for one activity in full.
Inputs: limit, start, includeDetails.
remove_gear_from_activityRemove Gear from ActivityADestructive
Remove/unlink a piece of gear from an activity. Note: Requires the gear UUID from Garmin Connect web interface.
Inputs: gearUUID (required), activityId (required).
request_reloadRequest Data ReloadADestructive
Request reload of data for a specific date (useful for older data that was offloaded by Garmin).
Inputs: date (required).
schedule_workoutSchedule WorkoutADestructive
Schedule an existing workout on a specific date. Returns a workoutScheduleId that can be used to unschedule.
Inputs: date (required), workoutId (required).
set_activity_nameSet Activity NameADestructive
Change the name of an existing activity.
Inputs: name (required), activityId (required).
set_activity_privacySet Activity PrivacyADestructive
Change the privacy of an activity. "subscribers" is what Garmin Connect shows as "connections only". Read the current level from accessControlRuleDTO in get_activity_details before changing it.
Inputs: privacy (required), activityId (required).
set_activity_typeSet Activity TypeBDestructive
Change the type/category of an existing activity.
Inputs: typeKey (required), activityId (required), typeId.
set_blood_pressureSet Blood PressureBDestructive
Record a blood pressure reading.
Inputs: pulse (required), dateTime (required), systolic (required), diastolic (required), +1 more.
setup_credentialsSetup Garmin CredentialsADestructive
Store Garmin Connect credentials encrypted in the OS native vault and log in immediately. Use this when the server reports that credentials are missing or invalid. The password is encrypted at rest and never written to a plain text file.
Inputs: email (required), password (required).
unschedule_workoutUnschedule WorkoutADestructive
Remove a scheduled workout from the calendar. Use get_scheduled_workouts to look up a workoutScheduleId. delete_workout unschedules on its own, so this is only needed to free a date while keeping the workout.
Inputs: scheduleId (required).
update_gearUpdate GearCDestructive
Update existing gear/equipment details.
Inputs: gearUUID (required), brandName, modelName, displayName, +1 more.
update_gear_collectionUpdate Gear CollectionADestructive
Update an existing gear collection. Can change name, add/remove gear items, or change associated activity types.
Inputs: collectionUUID (required), name, gearUUIDs, firstUseDate, +1 more.
update_workoutUpdate WorkoutADestructive
Update an existing workout (name, description, or structure).
Inputs: workoutId (required), description, workoutName, workoutSegments.
upload_activityUpload ActivityADestructive
Upload an activity file (FIT, GPX, TCX format) to Garmin Connect.
Inputs: filePath (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 110 tools
Many tools are distinct, but there is notable overlap among health metrics tools (get_steps, get_steps_data, get_daily_steps, get_health_metrics, get_daily_summary, get_user_summary) and stress tools (get_stress_data, get_all_day_stress). Descriptions help somewhat, but an agent could easily pick the wrong one for a given need.
The vast majority follow a consistent get_/set_/add_/delete_/create_/update_ verb_noun pattern. Minor deviations like request_reload, setup_credentials, check_credentials, clear_credentials, and compare_activities/find_similar_activities are acceptable but break the strict pattern slightly.
110 tools is far beyond the typical well-scoped server. While Garmin Connect has a broad API, this surface is sprawling and would be difficult for an agent to navigate efficiently. Many tools could be consolidated (e.g., multiple step/health summary tools).
The tool set covers an impressively wide range of Garmin Connect functionality: activities, workouts, devices, health metrics, gear, badges, challenges, and credentials. Minor gaps exist (e.g., no tool for updating device settings or managing challenges), but the core domains are well covered.
Maintenance
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.
Connect Claude to your Intervals.icu watch data for fitness, workout review, and plan writing.
Log meals, water, and weight to Garmin Connect from Claude or ChatGPT.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables Claude Desktop to access and analyze Garmin wearable health data including sleep, HRV, Body Battery, and activity metrics. Users can query their health trends, track recovery, and generate interactive HTML dashboards using natural language.97MIT
- FlicenseNot gradedqualityDmaintenanceConnects Garmin watch data to Claude Desktop, allowing users to ask natural language questions about their health and activity data from Garmin Connect.-
- AlicenseBqualityBmaintenanceEnables users to analyze their own Garmin Connect data—activities, sleep, HRV, Body Battery, training readiness—directly inside Claude Desktop.13864 npm2MIT
- AlicenseAqualityBmaintenanceDaash connects Garmin Connect to ChatGPT and Claude. Your assistant reads your runs, splits, sleep, HRV, Body Battery and recovery, and writes structured workouts and whole training plans to your Garmin calendar, so they're on your watch at the next sync. Free, hosted, open source. Works on free Claude.265MIT