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.
get_all_gear: ✅ ORA FUNZIONANTE - Lista automatica di tutto l'equipaggiamento (non richiede più UUID manuale!): ❌ RIMOSSO (l'API OAuth Garmin restituisce 403 Forbidden per la creazione gear)create_gearupdate_gear: Aggiorna equipaggiamento (UUID ora ottenibile viaget_all_gear)delete_gear: Elimina equipaggiamento (UUID ora ottenibile viaget_all_gear)
get_gear_types: Ottieni i tipi di equipaggiamento disponibili (scarpe, bici, casco, etc.)get_gear_makes: Ottieni le marche/brand disponibiliget_gear_collections: Lista tutte le collezioni di equipaggiamentoget_gear_collection: Dettagli di una collezione specifica (gear associati, tipi attività)create_gear_collection: Crea una nuova collezione di equipaggiamentoupdate_gear_collection: Aggiorna una collezione (nome, gear, tipi attività)delete_gear_collection: Elimina una collezione
get_activity_comments: Ottieni commenti su un'attività ✅ FUNZIONANTE❌ RIMOSSO (Non supportato da API OAuth Garmin)add_activity_comment: Aggiungi commenti alle attivitàset_activity_privacy: Imposta privacy (public o private solo)⚠️ PARZIALE (opzione "followers" non supportata)
get_training_load: Carico di allenamento settimanale e bilanciamentoget_load_ratio: Rapporto acuto/cronico (injury risk indicator)get_performance_condition: Condizione di performance attuale
get_sleep_movement: Movimenti durante il sonno e momenti irrequieti
get_device_alarms: Ottieni sveglie configurate sui dispositivi
get_courses: Ottieni percorsi/route salvati
compare_activities: Confronta 2-5 attività fianco a fiancofind_similar_activities: Trova attività simili per tipo/distanza/durata (20% tolerance)analyze_training_period: Analisi completa trends, volumi e pattern di allenamento
Questo server MCP fornisce 106 potenti strumenti per interagire con i tuoi dati Garmin Connect:
| Strumento | Descrizione |
|---|---|
list_recent_activities |
Ottiene la lista delle attività recenti con filtri opzionali |
get_activity_details |
Ottiene informazioni dettagliate su un'attività specifica |
get_activity_splits |
Ottiene dati di split/lap per un'attività specifica |
get_workouts |
Ottiene la lista dei workout pianificati |
| Strumento | Descrizione |
|---|---|
get_health_metrics |
Ottiene metriche di salute giornaliere (passi, frequenza cardiaca, VO2 max) |
get_sleep_data |
Ottiene informazioni dettagliate sul sonno (durata, qualità, fasi) |
get_body_composition |
Ottiene dati sulla composizione corporea (peso, BMI, grasso corporeo) |
get_steps |
Ottiene il conteggio passi per una data specifica |
get_heart_rate |
Ottiene dati dettagliati sulla frequenza cardiaca |
get_hydration |
Ottiene dati giornalieri sull'idratazione |
| Strumento | Descrizione |
|---|---|
get_stress_data |
Ottiene i livelli di stress durante il giorno (scala 0-100) |
get_body_battery |
Ottiene i livelli di energia Body Battery (0-100) |
get_hrv_data |
Ottiene dati di variabilità cardiaca (HRV) |
get_respiration_data |
Ottiene dati sulla frequenza respiratoria |
get_spo2_data |
Ottiene dati SpO2 (saturazione di ossigeno nel sangue) |
| Strumento | Descrizione |
|---|---|
get_devices |
Ottiene la lista dei dispositivi Garmin connessi |
get_user_profile |
Ottiene informazioni sul profilo utente |
get_training_status |
Ottiene lo stato di allenamento e statistiche delle attività |
| Strumento | Descrizione |
|---|---|
get_workout_by_id |
Ottiene dettagli di un workout specifico |
download_workout |
Scarica workout in formato FIT per sync su device |
create_workout |
Crea workout strutturati con warmup, intervalli, cooldown |
update_workout |
Modifica un workout esistente |
delete_workout |
Elimina un workout |
schedule_workout |
Schedula un workout su una data specifica |
unschedule_workout |
Rimuove workout dal calendario ( |
| Strumento | Descrizione |
|---|---|
upload_activity |
Upload file attività (FIT, GPX, TCX) |
create_manual_activity |
Crea attività manuale |
set_activity_name |
Modifica nome attività |
set_activity_type |
Modifica tipo attività |
delete_activity |
Elimina un'attività ( |
download_activity |
Scarica attività in vari formati (FIT, TCX, GPX, KML, CSV) |
| Strumento | Descrizione |
|---|---|
get_device_last_used |
Ottiene info sull'ultimo dispositivo usato |
get_device_settings |
Ottiene impostazioni di un dispositivo |
| Strumento | Descrizione |
|---|---|
get_all_day_stress |
Ottiene stress dettagliato per tutto il giorno |
get_floors |
Ottiene piani saliti |
get_intensity_minutes |
Ottiene minuti di intensità (moderata e vigorosa) |
get_max_metrics |
Ottiene metriche max (VO2 max, etc.) |
get_training_readiness |
Ottiene punteggio Training Readiness |
get_endurance_score |
Ottiene Endurance Score |
get_fitness_age |
Ottiene Fitness Age stimata |
get_daily_summary |
Ottiene sommario giornaliero completo |
| Strumento | Descrizione |
|---|---|
get_weigh_ins |
Ottiene pesate in un range di date |
add_weigh_in |
Aggiunge pesata con dati composizione corporea |
delete_weigh_in |
Elimina una pesata |
get_blood_pressure |
Ottiene misurazioni pressione sanguigna |
set_blood_pressure |
Registra misurazione pressione |
delete_blood_pressure |
Elimina misurazione pressione |
| Strumento | Descrizione |
|---|---|
get_activity_weather |
Ottiene meteo durante un'attività |
get_activity_hr_zones |
Ottiene tempo nelle zone HR |
get_activity_exercise_sets |
Ottiene set esercizi (strength training) |
| Strumento | Descrizione |
|---|---|
get_goals |
Ottiene obiettivi (attivi, futuri, passati) |
get_adhoc_challenges |
Ottiene sfide ad-hoc |
get_badge_challenges |
Ottiene sfide badge disponibili |
get_earned_badges |
Ottiene badge guadagnati |
get_personal_records |
Ottiene record personali |
get_race_predictions |
Ottiene previsioni tempi gara (5K, 10K, HM, M) |
| Strumento | Descrizione |
|---|---|
get_all_gear |
Lista completa di tutto l'equipaggiamento con UUID |
update_gear |
Aggiorna equipaggiamento esistente |
delete_gear |
Elimina equipaggiamento |
get_gear_stats |
Ottiene statistiche uso gear |
link_gear_to_activity |
Collega gear a un'attività |
Nota: A partire dalla v4.1,
get_all_gearfunziona automaticamente e fornisce gli UUID necessari per gli altri strumenti gear. La creazione di nuovo gear non è supportata dall'API OAuth di Garmin.
| Strumento | Descrizione |
|---|---|
get_progress_summary |
Ottiene sommario progressi tra due date |
| Strumento | Descrizione |
|---|---|
get_user_summary |
Ottiene riepilogo utente per una data (steps, calories, etc.) |
get_steps_data |
Ottiene dati passi dettagliati per una data |
get_daily_steps |
Ottiene passi giornalieri in un range di date (max 28 giorni) |
get_activities_by_date |
Ottiene attività in un range di date |
get_activity_typed_splits |
Ottiene split per tipo di attività |
| Strumento | Descrizione |
|---|---|
get_rhr_day |
Ottiene frequenza cardiaca a riposo giornaliera |
get_hill_score |
Ottiene punteggio Hill Score in un range di date |
get_all_day_events |
Ottiene tutti gli eventi del giorno (stress, body battery) |
get_body_battery_events |
Ottiene eventi Body Battery dettagliati |
| Strumento | Descrizione |
|---|---|
get_available_badges |
Ottiene tutti i badge disponibili |
get_in_progress_badges |
Ottiene badge in corso di completamento |
get_available_badge_challenges |
Ottiene sfide badge disponibili |
get_non_completed_badge_challenges |
Ottiene sfide badge non completate |
get_in_progress_virtual_challenges |
Ottiene sfide virtuali in corso |
| Strumento | Descrizione |
|---|---|
get_gear_activities |
Ottiene attività associate a un gear |
remove_gear_from_activity |
Rimuove gear da un'attività |
| Strumento | Descrizione |
|---|---|
get_training_plans |
Ottiene piani di allenamento disponibili |
get_training_plan_by_id |
Ottiene dettagli piano di allenamento |
| Strumento | Descrizione |
|---|---|
get_menstrual_data |
Ottiene dati ciclo mestruale per una data |
get_pregnancy_summary |
Ottiene riepilogo gravidanza |
| Strumento | Descrizione |
|---|---|
get_activity_types |
Ottiene tutti i tipi di attività disponibili |
get_primary_training_device |
Ottiene dispositivo di allenamento primario |
count_activities |
Conta il numero totale di attività |
get_fitness_stats |
Ottiene statistiche fitness in un range di date |
add_hydration_data |
Aggiunge dati idratazione |
| Strumento | Descrizione |
|---|---|
get_activity_comments |
Ottiene commenti su un'attività |
set_activity_privacy |
Imposta privacy attività (public/private) |
| Strumento | Descrizione |
|---|---|
get_training_load |
Carico di allenamento settimanale e bilanciamento |
get_load_ratio |
Rapporto acuto/cronico (injury risk indicator) |
get_performance_condition |
Condizione di performance attuale |
| Strumento | Descrizione |
|---|---|
get_sleep_movement |
Movimenti durante il sonno e momenti irrequieti |
get_device_alarms |
Sveglie configurate sui dispositivi |
get_courses |
Percorsi/route salvati |
| Strumento | Descrizione |
|---|---|
compare_activities |
Confronta 2-5 attività fianco a fianco |
find_similar_activities |
Trova attività simili per tipo/distanza/durata |
analyze_training_period |
Analisi completa trends, volumi e pattern |
| Strumento | Descrizione |
|---|---|
get_gear_types |
Tipi di equipaggiamento disponibili (scarpe, bici, etc.) |
get_gear_makes |
Marche/brand disponibili |
| Strumento | Descrizione |
|---|---|
get_gear_collections |
Lista tutte le collezioni di equipaggiamento |
get_gear_collection |
Dettagli collezione (gear associati, tipi attività) |
create_gear_collection |
Crea nuova collezione con associazione attività |
update_gear_collection |
Aggiorna collezione (nome, gear, tipi attività) |
delete_gear_collection |
Elimina una collezione |
- Node.js 18.0 o superiore
- npm 8.0 o superiore
- Claude Desktop installato
- Account Garmin Connect con credenziali valide
Per utilizzare il vault nativo del sistema operativo (Windows Credential Manager, macOS Keychain, Linux Secret Service), installa keytar:
npm install keytarNota: Se
keytarnon può essere installato, il sistema userà automaticamente un file criptato come fallback.
Usa il browser oppure:
wget https://github.com/sedoglia/garmin-mcp-ts/releases/download/v4.1.0/diabetes-m-mcp.mcpbVerifica l'integrità (opzionale ma consigliato):
wget https://github.com/sedoglia/garmin-mcp-ts/releases/download/v4.1.0/diabetes-m-mcp.mcpb.sha256
sha256sum -c garmin-mcp-ts.mcpb.sha256Installazione 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 2) - 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.
Apri una nuova chat su Claude Desktop e scrivi il seguente prompt:
Configura le credenziali di accesso per Garmin
Rispondi al messaggio fornendo:
- Utente: la tua email Garmin
- Password: la tua password Garmin
L'estensione provvederà automaticamente a criptare e salvare le credenziali in modo sicuro nel vault nativo del sistema operativo (Windows Credential Manager, macOS Keychain, Linux Secret Service).
Nota: Le credenziali NON verranno salvate in file di testo. Saranno sempre crittografate e gestite dal vault nativo del SO.
- Chiudi completamente l'applicazione
- Riapri Claude Desktop
- Verifica in Impostazioni → Sviluppatore lo stato della connessione ✅
git clone https://github.com/sedoglia/garmin-mcp-ts.git
cd garmin-mcp-tsnpm installPer utilizzare il vault nativo del sistema operativo (Windows Credential Manager, macOS Keychain, Linux Secret Service), installa keytar:
npm install keytarNota: Se
keytarnon può essere installato, il sistema userà automaticamente un file criptato come fallback.
npm run buildEsegui 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-encryptionIn 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.
Il file di configurazione di Claude Desktop si trova in:
- Windows:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
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"]
}
}
}- 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?"
"Mostrami le mie ultime 5 attività Garmin"
"Quali attività ho fatto questa settimana?"
"Quali sono le mie metriche di salute per oggi?"
"Quanti passi ho fatto ieri?"
"Come ho dormito la scorsa notte?"
"Mostrami i dati del sonno del 10 dicembre"
"Mostrami i miei workout pianificati"
"Scarica il mio ultimo workout"
"Qual è il mio Training Readiness di oggi?"
"Mostrami il mio Endurance Score"
"Quanti km ho corso questo mese?"
"Mostrami il sommario dei miei progressi dell'ultimo mese"
"Qual è stata la mia frequenza cardiaca a riposo oggi?"
"Mostrami gli eventi di tutto il giorno per stress e body battery"
"Come influisce il mio ciclo mestruale sulla mia performance di allenamento?"
"In base al mio ciclo, quale tipo di allenamento dovrei fare?"
"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"
"Mostrami i commenti sulla mia ultima attività"
"Imposta la mia ultima corsa come privata"
"Come sta andando il mio carico di allenamento questo mese?"
"Qual è il mio rapporto acuto/cronico? Sono a rischio infortuni?"
"Confronta le mie ultime 3 corse"
"Trova attività simili alla mia corsa di domenica scorsa"
"Analizza il mio allenamento dell'ultimo mese"
Esegui i test con dati reali:
npm testIl test script verifica tutti gli strumenti con il tuo account Garmin.
garmin-mcp-ts/
├── src/
│ ├── index.ts # Punto di ingresso, gestione stdout/stderr
│ ├── garmin/
│ │ ├── client.ts # Client API Garmin Connect (2200+ righe)
│ │ ├── types.ts # Definizioni tipi TypeScript
│ │ └── simple-login.ts # Utility standalone per test login
│ ├── mcp/
│ │ ├── server.ts # Setup server MCP e gestori richieste
│ │ ├── tools.ts # Definizioni strumenti e schemi (106 tools)
│ │ └── handlers.ts # Logica implementazione strumenti
│ └── utils/
│ ├── constants.ts # Costanti dell'applicazione
│ ├── errors.ts # Classi di errore personalizzate
│ ├── logger.ts # Utility di logging (solo stderr)
│ └── secure-storage.ts # Modulo di storage sicuro con encryption
├── scripts/
│ ├── setup-encryption.ts # Script interattivo per setup credenziali
│ ├── check-encryption.ts # Script diagnostico per verificare encryption
│ └── test-keytar.ts # Script diagnostico per testare l'integrazione con Keytar
├── dist/ # Output JavaScript compilato
├── package.json
└── tsconfig.json
Il sistema di sicurezza utilizza un'architettura a due livelli per proteggere le credenziali:
| Sistema Operativo | Chiave di Encryption | Dati Criptati |
|---|---|---|
| Windows | Windows Credential Manager | %LOCALAPPDATA%\garmin-mcp\ |
| macOS | Keychain (Face ID/Touch ID) | ~/Library/Application Support/garmin-mcp/ |
| Linux | Secret Service (D-Bus/GNOME) | ~/.config/garmin-mcp/ |
- 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.enc - Token OAuth: I token vengono cifrati e salvati in
garmin-tokens.encper riutilizzo sessione
- 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
Se keytar non è disponibile (vault nativo), il sistema usa un file .encryption.key con permessi ristretti (0o600) nella directory dati.
Per verificare lo stato completo dell'encryption e keytar:
npm run check-encryptionPer testare l'integrazione con keytar:
npm run test-keytarAlcuni endpoint e funzionalità non sono disponibili tramite l'API OAuth pubblica di Garmin:
- ✅ Lettura commenti (
get_activity_comments): Funzionante - ❌ Scrittura commenti (
add_activity_comment): NON SUPPORTATO dall'API OAuth- I commenti possono essere aggiunti solo tramite:
- Web interface di Garmin Connect
- App mobile Garmin Connect
- NON disponibile via API OAuth
- I commenti possono essere aggiunti solo tramite:
- ✅ Impostare privacy (
set_activity_privacy): Parzialmente funzionante- ✅
public: Funziona correttamente - ✅
private: Funziona correttamente - ❌
followers: NON SUPPORTATO - restituisce errore 400 "PRIVACY_INVALID"
- ✅
- ✅ Lista gear (
get_all_gear): Funzionante (via endpointfilterGear) - ✅ Aggiorna/elimina gear (
update_gear,delete_gear): Funzionante - ❌ Creazione gear (
create_gear): RIMOSSO - l'API OAuth restituisce 403 Forbidden- I gear possono essere creati solo tramite:
- Web interface di Garmin Connect
- App mobile Garmin Connect
- I gear possono essere creati solo tramite:
- ✅ Collezioni gear (CRUD completo): Funzionante
Alcune metriche potrebbero non essere disponibili a seconda del modello di smartwatch:
| Metrica | Dispositivi Supportati | Note |
|---|---|---|
get_endurance_score |
Solo dispositivi premium (Fenix 7+, Forerunner 955+) | Non disponibile su Instinct 2 Solar |
get_training_readiness |
Solo Instinct 2X | Non su Instinct 2 Solar standard |
get_floors |
Richiede barometro | Potrebbe non sincronizzarsi via API |
get_intensity_minutes |
Tutti i dispositivi | Potrebbe non sincronizzarsi via API |
get_training_load |
Richiede 7+ giorni di dati | Usa Firstbeat Analytics |
get_load_ratio |
Richiede 4+ settimane consecutive | Calcolato su storico esteso |
get_performance_condition |
Durante attività | Visibile sul watch, non sempre via API |
Nota: Alcune metriche sono visibili nell'app Garmin Connect ma potrebbero non essere esposte tramite API OAuth.
- 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
Garmin potrebbe bloccare temporaneamente le richieste se ne vengono fatte troppe in un breve periodo. Attendi qualche minuto e riprova.
- Controlla che il percorso a
dist/index.jssia corretto e assoluto - Verifica che la sintassi del JSON di configurazione sia valida
- Riavvia completamente Claude Desktop
- Controlla i log di Claude Desktop per eventuali errori
Il server produce informazioni diagnostiche su stderr. In Claude Desktop, controlla i log dell'applicazione:
- Windows:
%APPDATA%\Claude\logs\ - macOS:
~/Library/Logs/Claude/
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.
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
Questo progetto è rilasciato sotto Licenza MIT - vedi il file LICENSE per i dettagli.
Questo progetto rispetta la tua privacy. Per informazioni complete su come vengono gestiti i tuoi dati, consulta la nostra Privacy Policy.
- 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
Questo progetto non è affiliato, approvato o connesso a Garmin Ltd. o alle sue sussidiarie. Garmin e Garmin Connect sono marchi registrati di Garmin Ltd.
Se questo progetto ti è utile, considera di supportarlo con una donazione!
English | Italiano | Segnala Problemi