Garmin Training MCP

Garmin Training MCP

Connects Claude to Garmin Connect to view fitness data and create adaptive training plans for running, swimming, cycling, and strength. Supports both local and VPS deployment with optional Supabase storage.

Category
访问服务器

README

Garmin Training MCP

Servidor MCP que conecta Claude con tu cuenta de Garmin Connect para que Claude pueda ver tus actividades, tu sueño y tus datos de recuperación, y con eso crear y adaptar día a día tu plan de entrenamiento (running, natación, ciclismo, fuerza) según tu meta.

Modos de uso

Modo Transporte Dónde corre Ventaja
Local stdio Tu ordenador, con Claude Desktop Cero infraestructura, cero latencia
VPS (Dokploy) HTTP Tu VPS, accesible por HTTPS Accesible desde Claude Desktop, Claude Code, móvil...

Puedes usar ambos simultáneamente: el local para uso rápido en el PC, el VPS para cuando estés fuera o desde el móvil.


1. Instalación

cd garmin-training-mcp
python3 -m venv venv
source venv/bin/activate        # en Windows: venv\Scripts\activate
pip install -r requirements.txt

2. Credenciales de Garmin

La primera vez que el servidor se conecte necesita tu email y contraseña de Garmin Connect (las mismas que usas en la app). Después de ese primer login, el servidor guarda un token de sesión en ~/.garmin_mcp/tokens y no vuelve a pedir credenciales (hasta que el token caduque).

export GARMIN_EMAIL="tu_email@ejemplo.com"
export GARMIN_PASSWORD="tu_contraseña"

3. Modo local (stdio con Claude Desktop)

3.1 Configurar Claude Desktop

Abre (o crea) el archivo de configuración de Claude Desktop:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "garmin-training": {
      "command": "/ruta/absoluta/a/garmin-training-mcp/venv/bin/python3",
      "args": ["/ruta/absoluta/a/garmin-training-mcp/server.py"],
      "env": {
        "GARMIN_EMAIL": "tu_email@ejemplo.com",
        "GARMIN_PASSWORD": "tu_contraseña"
      }
    }
  }
}

Reinicia Claude Desktop. Verás "garmin-training" en las herramientas disponibles.


4. Modo VPS con Dokploy

4.1 Subir el código a GitHub

cd garmin-training-mcp
git init && git add -A && git commit -m "initial"
git remote add origin https://github.com/TU_USUARIO/garmin-training-mcp.git
git push -u origin main

4.2 Crear el proyecto en Dokploy

  1. En tu VPS con Dokploy: Projects → Create Project → nombre garmin-training
  2. Applications → Deploy from GitHub → selecciona el repo
  3. Build Settings: Dokploy detecta el Dockerfile automáticamente. Si no:
    • Build Pack: Dockerfile
    • Dockerfile path: Dockerfile
  4. Puerto: 8080

4.3 Variables de entorno en Dokploy

En tu proyecto → Environment → añade:

GARMIN_EMAIL=tu_email@example.com
GARMIN_PASSWORD=tu_contraseña
SUPABASE_URL=https://tu-proyecto.supabase.co    # opcional
SUPABASE_KEY=tu_clave_anon                        # opcional
MCP_PORT=8080

⚠️ Si usas Supabase, crea primero las tablas (ver sección más abajo).

4.4 Dominio + HTTPS

  1. En Dokploy → Domains → añade tu dominio (ej: garmin.tudominio.com)
  2. Dokploy configura SSL automáticamente con Let's Encrypt
  3. Tu MCP server queda accesible en https://garmin.tudominio.com/mcp/

4.5 Conectar Claude al VPS

En claude_desktop_config.json (o .claude/settings.json para Claude Code):

{
  "mcpServers": {
    "garmin-training": {
      "transport": {
        "type": "streamable-http",
        "url": "https://garmin.tudominio.com/mcp/"
      }
    }
  }
}

Reinicia Claude Desktop. Las mismas tools estarán disponibles, pero ahora corriendo en tu VPS.

4.6 Probar la conexión

curl -X POST https://garmin.tudominio.com/mcp/ \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

5. Cómo usarlo con Claude

Ejemplos de cosas que puedes pedirle a Claude una vez conectado:

  • "Mi meta es correr una media maratón en menos de 1h50 el 15 de noviembre. Entreno 4 días por semana. Créame un plan."
  • "Buenos días, ¿qué toca hoy?" → Claude usará get_daily_briefing
  • "¿Puedo hacer series hoy o mejor lo dejo suave?"get_training_recommendation
  • "Ayer nadé 2000m, ¿cómo voy?"get_recent_activities / get_activity_detail
  • "He dormido fatal esta semana, ajusta el plan"get_sleep + save_training_plan
  • "¿Cómo entrené el mes pasado?"query_activities_by_date_range

6. Herramientas (tools) que expone el servidor

Tool Para qué sirve
get_recent_activities Actividades de los últimos N días
get_activity_detail Detalle + parciales de una actividad concreta
get_sleep Sueño (score, fases, horas) de los últimos N días
get_recovery HRV, FC reposo, estrés, Body Battery, training readiness
get_fitness_status Estado de forma general y predicciones de marca
query_activities_by_date_range Actividades entre dos fechas concretas
get_training_load Minutos entrenados por semana y ratio ACWR
get_training_recommendation Veredicto de "¿qué puedo hacer hoy?" con razones
import_strava_csv Importa el activities.csv del export de Strava
get_strava_activities Actividades importadas de Strava
get_combined_activities Garmin + Strava juntas, ordenadas por fecha
get_goal / set_goal Leer / definir tu meta
get_training_plan / save_training_plan Leer / guardar el plan
get_adaptation_journal Histórico de ajustes al plan
get_exercise_library Ejercicios de fuerza/core reales
log_strength_session Registra una sesión de gimnasio
get_strength_history Histórico de sesiones de fuerza
get_daily_briefing Resumen todo-en-uno para decidir el ajuste del día

7. Multi-dispositivo con Supabase (opcional)

Por defecto, el objetivo/plan/diario/histórico se guardan en JSON local. Si defines SUPABASE_URL + SUPABASE_KEY, se usa Supabase (Postgres en la nube).

Crear las tablas en Supabase

En el SQL Editor de tu proyecto Supabase:

create table if not exists goals (
  id int primary key default 1,
  sport text,
  description text,
  target_date date,
  details jsonb,
  updated_at timestamptz default now()
);

create table if not exists training_plan (
  id int primary key default 1,
  plan jsonb,
  updated_at timestamptz default now()
);

create table if not exists journal (
  id bigserial primary key,
  ts timestamptz default now(),
  note text
);

create table if not exists strength_log (
  id bigserial primary key,
  date date,
  exercises jsonb,
  notes text,
  logged_at timestamptz default now()
);

En Project Settings → API → copia la Project URL y la clave anon/public.

Importar histórico de Strava

  1. Strava → Configuración → Mi cuenta → "Descargar o eliminar tu cuenta"
  2. Dentro del ZIP: activities.csv
  3. Dile a Claude: "Importa mi CSV de Strava, está en /ruta/activities.csv"
  4. Puedes re-importar: las actividades no se duplican

8. Notas y límites

  • Librería no oficial: si Garmin cambia su API, puede dejar de funcionar hasta que se actualice garminconnect (pip install -U garminconnect).
  • Sin push/webhooks: Claude tira de los datos cuando se lo pides; no hay notificación automática en tiempo real.
  • Los datos de fuerza dependen de que tu reloj/app los registre con detalle.
  • El motor de recomendación es un motor de reglas transparente, no un diagnóstico médico. Si hay dolor o enfermedad, eso pesa más que cualquier número.

Variables de entorno

Variable Requerido Descripción
GARMIN_EMAIL Email de Garmin Connect
GARMIN_PASSWORD Contraseña de Garmin Connect
SUPABASE_URL No URL del proyecto Supabase
SUPABASE_KEY No Clave anon/public de Supabase
MCP_HOST No Host del servidor HTTP (default: 0.0.0.0)
MCP_PORT No Puerto del servidor HTTP (default: 8080)

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选