DkwtMCP

DkwtMCP

Local MCP server that connects Claude Desktop with Garmin and Apple Health data to read training and recovery, estimate heart rate and pace zones, analyze performance, and create structured workouts.

Category
访问服务器

README

DkwtMCP

Servidor MCP local que conecta Claude Desktop con tus datos de Garmin y Apple Health, para leer tu entrenamiento y recuperación, estimar tus zonas de frecuencia cardíaca y de ritmo, analizar tu rendimiento y crear/programar entrenos estructurados — todo desde una conversación con Claude. Sirve tanto para ciclismo como para running.

Proyecto personal del equipo DkwtMCP. Inspirado en FitMCP, pero de uso local: tus credenciales y datos se quedan en tu ordenador, sin servidor ni suscripciones.


Qué hace

  • Garmin — entreno y actividades: lee tus actividades y su detalle (con splits por km), estima tus zonas de FC y tus zonas de ritmo, y crea y programa entrenos estructurados por zonas de FC o por ritmo en tu calendario de Garmin.
  • Garmin — rendimiento y carga: predicciones de carrera (5K/10K/media/maratón), récords personales, VO2max y edad fitness, y estado de entrenamiento con carga aguda/crónica.
  • Apple Health (vía Apple Watch): datos de salud y recuperación (sueño, HRV, FC en reposo, pasos, energía) y todos tus entrenos del Apple Watch (fuerza, caminata, remo, ciclismo indoor, etc.).
  • Transversal: cruza lo planificado (Garmin) con lo ejecutado y calcula tu adherencia al plan.

La gracia es que Garmin y Apple no se hablan entre ellos, pero aquí conviven en la misma conversación: puedes preguntar "¿cómo dormí (Apple) y qué entreno me toca hoy (Garmin)?".


Avisos importantes

  • Garmin usa la librería no oficial python-garminconnect. Funciona muy bien pero es frágil ante cambios de Garmin; la versión está fijada en requirements.txt. Es para uso personal.
  • Apple Health no tiene API en la nube: los datos se obtienen exportando desde el iPhone (ver más abajo). Es solo lectura.
  • Este software se ofrece "tal cual", sin garantías. Úsalo con tu propia cuenta y bajo tu responsabilidad.

Requisitos

  • macOS (probado) o Linux. Windows debería funcionar con ajustes de rutas.
  • Claude Desktop.
  • Una cuenta de Garmin Connect.
  • Python 3.10 o superior — solo para la instalación desde el código (opción B). Con el binario (opción A) no necesitas Python.
  • (Opcional) Un Apple Watch + la app Health Auto Export para los datos de recuperación/fuerza.
  • Node.js solo si quieres probar con el MCP Inspector (opcional).

Instalación

Hay dos formas, según tu perfil:

  • A) Sin conocimientos técnicos (Mac, sin Python): usa el binario ya compilado. Solo tienes que colocar una carpeta, iniciar sesión en Garmin una vez y pegar una línea en Claude Desktop. Sigue la guía paso a paso con capturas: packaging/GUIA_INSTALACION.pdf. (El binario dkwtmcp hay que compilarlo en un Mac una vez con packaging/build_mac.sh, o pedírselo a quien te comparta el proyecto.)
  • B) Desde el código (desarrolladores, con Python): sigue los pasos de abajo.

Instalación desde el código (opción B)

git clone <URL-de-tu-repo> DkwtMCP
cd DkwtMCP

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

cp .env.example .env                 # y rellena tus valores (ver abajo)

Configuración (.env)

Edita .env:

ENABLE_GARMIN=true
ENABLE_APPLE=false                   # ponlo a true si usas Apple Watch

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

APPLE_EXPORT_DIR=                     # ruta a tu carpeta de exports de Apple (ver sección Apple)

Tu .env nunca se sube a git (está en .gitignore).


Login de Garmin (una sola vez)

El servidor no hace login interactivo (se colgaría pidiendo el código 2FA), así que se generan los tokens una vez con un script:

python scripts/garmin_login.py

Te pedirá tu email, contraseña y, si tienes verificación en dos pasos, el código 2FA. Los tokens quedan guardados en ~/.dkwtmcp/garmin/ y se reutilizan en cada arranque. Solo hay que repetirlo si caducan.

Nota: Garmin limita los intentos de login por IP. Si ves un error 429, espera 30–60 minutos (o cambia de red, p. ej. el punto de acceso del móvil) y reintenta.


Sincronización con Apple Health

Apple Health no se puede sincronizar hacia Garmin ni tiene API en la nube. La forma práctica de traer tus datos del Apple Watch (sueño, HRV, FC en reposo, fuerza) es la app Health Auto Export – JSON+CSV (App Store), que exporta automáticamente a una carpeta.

1. Instala y configura Health Auto Export

  1. Instala Health Auto Export – JSON+CSV en el iPhone.
  2. Crea una automatización (o exportación) con estas opciones:
    • Formato: JSON.
    • Destino: iCloud Drive (así los archivos aparecen también en tu Mac).
    • Frecuencia: por ejemplo, diaria.
  3. Métricas de salud — asegúrate de incluir al menos: Sleep Analysis, Heart Rate Variability, Resting Heart Rate, Heart Rate, Steps, Active Energy.
  4. Entrenos (Workouts) — es una categoría aparte. Si quieres ver tus sesiones de fuerza, añade también una exportación de Workouts en JSON al mismo sitio.

Puedes usar dos automatizaciones (una de métricas y otra de workouts) apuntando a subcarpetas dentro de una carpeta común; el MCP las lee de forma recursiva.

Sobre el sueño: el MCP entiende tanto el formato agregado (en minutos) como el detallado por segmentos, y calcula fases (Profundo, Esencial/Core, REM), Vigilia y Tiempo en la cama para que coincidan con la app Salud del iPhone.

2. Apunta APPLE_EXPORT_DIR a la carpeta

Health Auto Export guarda en su propia carpeta de iCloud, cuya ruta en el Mac es del tipo:

/Users/TU_USUARIO/Library/Mobile Documents/iCloud~com~ifunography~HealthExport/Documents

Pon esa carpeta (la que contiene tus subcarpetas de export) en APPLE_EXPORT_DIR, y ENABLE_APPLE=true. El escaneo es recursivo, así que basta con apuntar a la carpeta padre.

iCloud: si tienes activado "Optimizar almacenamiento del Mac", los archivos pueden estar solo en la nube. Haz clic derecho en la carpeta → Descargar ahora para que estén en local.

3. Importa

Los datos de Apple se importan bajo demanda. En una conversación de Claude di "importa mi Apple Salud" (ejecuta apple_import_export), que borra y reconstruye una base local (SQLite) en ~/.dkwtmcp/apple/. Repite el import cuando quieras refrescar con datos nuevos.


Conectar a Claude Desktop

  1. En Claude Desktop: Ajustes → Developer → Edit Config (abre claude_desktop_config.json).
  2. Añade el bloque de mcpServers (ver claude_desktop_config.example.json), ajustando las rutas a tu instalación:
{
  "mcpServers": {
    "DkwtMCP": {
      "command": "/ruta/a/DkwtMCP/.venv/bin/python",
      "args": ["-m", "dkwt_mcp.server"],
      "cwd": "/ruta/a/DkwtMCP/src",
      "env": { "PYTHONPATH": "/ruta/a/DkwtMCP/src" }
    }
  }
}
  1. Cierra Claude Desktop del todo (Cmd+Q) y reábrelo. Deberías ver DkwtMCP en el menú de herramientas.

Usa el Python del entorno virtual (.venv/bin/python), no el del sistema; si no, no encontrará las dependencias.

Consejo: instrucciones del proyecto

Para que Claude elija bien las herramientas, en tu Proyecto de Claude añade instrucciones tipo: "la recuperación (sueño, HRV, FC reposo) viene de Apple; las actividades, entrenos, zonas (FC y ritmo), rendimiento y carga, de Garmin". Y si eres corredor, indícalo ("entreno running, prográmame por ritmo con sport=running") para que use ritmo en vez de zonas de FC.


Herramientas disponibles

Herramienta Plataforma Qué hace
garmin_daily_readiness Garmin Recuperación del día (readiness, HRV, sueño, FC reposo, estrés, Body Battery)*
garmin_get_activities Garmin Últimas actividades con métricas
garmin_get_activity Garmin Detalle de una actividad
garmin_sleep / garmin_hrv Garmin Desglose de sueño / HRV nocturna*
garmin_hr_zones Garmin Estima tus zonas de FC (Karvonen o %FCmax), filtrando lecturas imposibles
garmin_pace_zones Garmin Estima zonas de ritmo (running) a partir del ritmo umbral
garmin_activity_splits Garmin Parciales (splits) de una actividad con ritmo por km y FC
garmin_race_predictions Garmin Predicciones de tiempo 5K / 10K / media / maratón
garmin_personal_records Garmin Récords personales (mejores marcas)
garmin_fitness_metrics Garmin VO2max (correr y ciclismo) y edad fitness
garmin_training_status Garmin Estado de entrenamiento, carga aguda/crónica, VO2max y endurance score
garmin_schedule_workout Garmin Crea y programa entrenos estructurados por zonas de FC o por ritmo (previsualización por defecto)
garmin_list_workouts / garmin_delete_workout Garmin Listar / borrar entrenos guardados
fitness_planned_vs_actual Transversal Compara plan (entrenos programados) vs. ejecutado y calcula adherencia
apple_import_export Apple Importa tus exports de Apple Health/Health Auto Export a una base local
apple_query_metric Apple Sueño (por noche), HRV, FC reposo, pasos, energía en un rango
apple_get_workouts Apple Entrenos del Apple Watch (fuerza, caminata, remo, etc.)

* Las métricas de recuperación de Garmin (sueño, HRV, Body Battery…) requieren un reloj/pulsera Garmin; un ciclocomputador Edge no las registra. En ese caso usa las herramientas de Apple.


Ejemplos de uso

Una vez conectado, habla con Claude en lenguaje natural:

Ciclismo / general

  • "Lista mis últimas 5 actividades de Garmin."
  • "Estima mis zonas de frecuencia cardíaca."
  • "Prográmame un 4×5 minutos en Zona 4 para el sábado (primero en previsualización)."
  • "¿Cumplí el plan esta semana?" (plan vs. ejecutado)

Running

  • "Estima mis zonas de ritmo, mi umbral es 4:20/km."
  • "Prográmame un rodaje de 40 min en ritmo fácil el domingo." / "Un 4×5 min a 4:20-4:30 el martes."
  • "¿Cómo dosifiqué mi última carrera? Enséñame los splits."
  • "¿Qué tiempo predice Garmin para mi media maratón? ¿Y mis récords?"
  • "¿Cómo va mi estado de entrenamiento y mi carga aguda/crónica?"

Recuperación y fuerza (Apple)

  • "¿Cómo dormí anoche?"
  • "¿Cuántos entrenos de fuerza hice en junio y cuánto sumaron?"
  • "¿Mi HRV baja los días que entreno fuerza?"

Seguridad en escritura

Las herramientas que escriben en Garmin llevan confirmación: garmin_schedule_workout usa dry_run (por defecto solo previsualiza) y garmin_delete_workout requiere confirm=true.


Probar sin Claude Desktop (opcional)

Con el MCP Inspector:

cd src
npx @modelcontextprotocol/inspector python -m dkwt_mcp.server

Compartir con otra persona

En packaging/ hay lo necesario para generar un binario de macOS autocontenido (con PyInstaller) que no requiere Python en el ordenador de destino, pensado para alguien sin conocimientos técnicos. Cada persona usa su propia cuenta de Garmin. Ver packaging/GUIA_INSTALACION.pdf.


Solución de problemas

DkwtMCP no aparece en Claude Desktop. Revisa que en claude_desktop_config.json la ruta a Python sea la del entorno virtual (.venv/bin/python) y que cwd/PYTHONPATH apunten a src. Cierra Claude del todo (Cmd+Q) y reábrelo; recargar la ventana no basta.

Cambié el código y no veo el cambio. El servidor MCP se carga al arrancar Claude Desktop. Tras editar código, cierra y reabre Claude Desktop. Si tocaste datos de Apple, vuelve a importar ("importa mi Apple Salud").

Login de Garmin: error 429. Garmin limita los intentos por IP. Espera 30–60 minutos sin reintentar, o cambia de red (p. ej. el punto de acceso del móvil) y repite el login.

Login de Garmin falla / dejó de funcionar. Los tokens pueden caducar, o Garmin puede haber cambiado su sistema (la librería es no oficial). Vuelve a ejecutar python scripts/garmin_login.py. Si sigue fallando, comprueba si hay una versión nueva de garminconnect.

Las métricas de recuperación de Garmin (sueño, HRV, Body Battery) salen vacías. Esas las mide un reloj/pulsera Garmin en la muñeca; un ciclocomputador Edge no las registra. Si llevas Apple Watch, usa las herramientas de Apple para la recuperación.

Apple: "no hay datos importados". Ejecuta primero apple_import_export ("importa mi Apple Salud"). El import borra y reconstruye la base cada vez.

Apple: no encuentra la carpeta de exports. Health Auto Export guarda en su propia carpeta de iCloud (.../iCloud~com~ifunography~HealthExport/Documents). Apunta APPLE_EXPORT_DIR ahí. Si usas iCloud con "Optimizar almacenamiento", haz clic derecho en la carpeta → Descargar ahora.

Herramientas de running (predicciones, récords, estado) salen con campos vacíos. Requieren un reloj Garmin con esos datos calculados y actividades recientes. Si algún campo sale null pese a tenerlo en Garmin, es cosa del parseo: ábrelo con response_format: "json" y repórtalo.


Preguntas frecuentes (FAQ)

¿Necesito saber programar o tener Python? Para la vía del binario (opción A) no. Para instalar desde el código (opción B) sí necesitas Python.

¿Funciona con el plan gratuito de Claude? Sí. Los MCP locales por archivo de configuración funcionan en Claude Desktop, también en el plan Free.

¿Se suben mis datos a algún sitio? No. Todo es local: tus credenciales van en .env (nunca al repo) y los datos se guardan en ~/.dkwtmcp/ de tu ordenador. No hay servidor.

¿Puedo compartirlo? ¿Y usarlo varias personas? Sí. El código se comparte; cada persona usa su propia cuenta de Garmin (su propio login y tokens).

¿Sirve para ciclismo y para running? Para ambos. Ciclismo por zonas de FC/potencia; running por zonas de ritmo, con análisis de rendimiento y carga.

¿Soporta Strava? No por ahora. Sus términos (2025) prohíben usar sus datos en IA, así que se retiró del alcance.

¿Por qué puede dejar de funcionar Garmin de repente? Usa una librería no oficial; si Garmin cambia su sistema de acceso, puede romperse hasta que la librería se actualice. Es un riesgo asumido de un proyecto personal.

¿Cada cuánto tengo que importar los datos de Apple? Cuando quieras refrescar. Con una automatización de Health Auto Export que deje los archivos en la carpeta, basta con volver a decir "importa mi Apple Salud".

¿Funciona en Windows? Debería, ajustando rutas. Está probado en macOS.


Estructura del proyecto

DkwtMCP/
├── src/dkwt_mcp/
│   ├── app.py              # instancia FastMCP
│   ├── server.py           # entrypoint (stdio)
│   ├── cli.py / login.py   # login de Garmin y arranque
│   ├── config.py           # configuración desde .env
│   ├── common.py           # utilidades (errores, formato)
│   └── providers/
│       ├── garmin.py       # herramientas garmin_*
│       ├── apple.py        # herramientas apple_*
│       └── fitness.py      # herramienta transversal fitness_*
├── scripts/garmin_login.py
├── packaging/              # binario y guía para compartir
├── requirements.txt
├── .env.example
└── claude_desktop_config.example.json

Licencia

Publicado bajo licencia MIT — ver LICENSE. Puedes usarlo, modificarlo y distribuirlo libremente, conservando el aviso de copyright (el crédito a la autora).

Cómo citar

Si usas este proyecto, cítalo por favor. GitHub mostrará un botón "Cite this repository" gracias a CITATION.cff. En resumen:

Infantes, N. (2026). DkwtMCP – MCP local para Garmin y Apple Health.


Aviso legal

Proyecto personal, sin relación con Garmin ni Apple. Usa una librería no oficial para Garmin; su funcionamiento puede romperse si Garmin cambia su sistema. No hay garantía de ningún tipo. Tú eres responsable del uso que hagas de tus propias cuentas y datos.

推荐服务器

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 模型以安全和受控的方式获取实时的网络信息。

官方
精选