DkwtMCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ENABLE_APPLE | No | Enable Apple Health integration. | false |
| GARMIN_EMAIL | No | Your Garmin Connect email address. Required if ENABLE_GARMIN is true and no tokens exist. | |
| ENABLE_GARMIN | No | Enable Garmin Connect integration. | true |
| GARMIN_PASSWORD | No | Your Garmin Connect password. Required if ENABLE_GARMIN is true and no tokens exist. | |
| APPLE_EXPORT_DIR | No | Path to the folder containing Apple Health exports. Required if ENABLE_APPLE is true. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| garmin_daily_readinessA | Resume la recuperacion de un dia: training readiness, HRV, sueño, FC reposo, estres y Body Battery. La herramienta clave para decidir si empujar o descansar. Args: params: date (YYYY-MM-DD), response_format (markdown|json). Returns: str: dict con readiness_score, fc_reposo, estres_medio, body_battery_min/max, sueño_score, sueño_horas, hrv_media_noche; o "Error: ...". |
| garmin_get_activitiesA | Lista las ultimas actividades registradas con sus metricas resumidas. Args: params: limit (1-50), response_format (markdown|json). Returns: str: lista con id, nombre, tipo, fecha, distancia_m, duracion_s, fc_media, potencia_media_w; o "Error: ...". |
| garmin_get_activityA | Devuelve el detalle de una actividad concreta de Garmin. Args: params: activity_id (str), response_format (markdown|json). Returns: str: metricas clave (distancia, duracion, desnivel, FC media/max, potencia, calorias, VO2max, training effect); o "Error: ...". |
| garmin_sleepA | Desglose del sueño de una noche: fases, duracion total y puntuacion. Args: params: date (YYYY-MM-DD), response_format (markdown|json). Returns: str: dict con horas totales, fases (profundo/ligero/rem/despierto en horas), score y FC/respiracion media si estan disponibles; o "Error: ...". |
| garmin_hrvA | Variabilidad de la frecuencia cardiaca (HRV) de la noche indicada. Args: params: date (YYYY-MM-DD), response_format (markdown|json). Returns: str: dict con media de la ultima noche, media semanal, estado (balanced/ unbalanced/low) y rango base; o aviso si el dispositivo no reporta HRV. |
| garmin_hr_zonesA | Estima tus zonas de frecuencia cardiaca (Z1-Z5) a partir de tus datos. Determina la FC maxima por prioridad: max_hr (si lo das) > mayor FC max observada en tus ultimas actividades > formula de Tanaka (208 - 0.7*edad). Usa la FC de reposo de Garmin. Calcula las zonas por Karvonen (FC reserva) o por %FCmax. OJO e-bike: con bici electrica cuesta llegar a la FC maxima real, asi que la estimacion observada puede quedarse corta. Un test de campo o dar tu max_hr real da mejores zonas. Esta tool NO escribe en Garmin: las zonas se configuran a mano en Garmin Connect (Ajustes de usuario > Zonas de FC). Args: params: max_hr?, age?, scan_activities (1-100), method (karvonen|hrmax), response_format (markdown|json). Returns: str: FCmax y FC reposo usadas, metodo, fuente de la FCmax, y la tabla de zonas Z1-Z5 con su rango en ppm; o "Error: ...". |
| garmin_pace_zonesA | Estima las zonas de ritmo de carrera (Z1-Z5) a partir del ritmo umbral. Si das threshold_pace lo usa; si no, intenta leer tu umbral de lactato de Garmin. Las zonas se calculan como multiplos del ritmo umbral (modelo clasico de 5 zonas). Args: params: threshold_pace? ('M:SS'/km), response_format (markdown|json). Returns: str: ritmo umbral usado y la tabla de zonas Z1-Z5 con su rango de ritmo (min/km); o "Error: ...". |
| garmin_activity_splitsA | Devuelve las vueltas (laps) de una actividad con su ritmo, FC y distancia. Util para ver como dosifico un corredor. Nota: usa las VUELTAS de la actividad; si el reloj tiene auto-lap cada km, saldra el ritmo km a km. Si la actividad no tiene vueltas (no se pulso lap ni hay auto-lap), saldra como un unico tramo. Args: params: activity_id (str), response_format (markdown|json). Returns: str: lista de splits con distancia_km, tiempo, ritmo (min/km) y FC media; o "Error: ...". |
| garmin_race_predictionsA | Predicciones de tiempo de Garmin para 5K, 10K, media maraton y maraton. Args: params: response_format (markdown|json). Returns: str: tiempos estimados por distancia; o "Error: ...". |
| garmin_personal_recordsB | Lista tus records personales de Garmin (mejores marcas). Args: params: response_format (markdown|json). Returns: str: lista de records con tipo, valor y fecha; o "Error: ...". |
| garmin_fitness_metricsB | VO2max (correr y ciclismo) y edad fitness de Garmin. Args: params: date? (YYYY-MM-DD, por defecto hoy), response_format (markdown|json). Returns: str: vo2max_running, vo2max_cycling y edad_fitness; o "Error: ...". |
| garmin_training_statusA | Estado de entrenamiento, carga aguda/cronica, VO2max y endurance score. Reune training status (estado, carga aguda, ratio agudo/cronico), VO2max y, si estan disponibles, endurance score y hill score. Args: params: date? (YYYY-MM-DD, por defecto hoy), response_format (markdown|json). Returns: str: dict con estado de entrenamiento y metricas de carga; o "Error: ...". |
| garmin_schedule_workoutA | Crea un entreno estructurado y lo programa en una fecha del calendario de Garmin. SEGURIDAD: por defecto NO escribe (dry_run=True): devuelve una previsualizacion. Para crear y programar de verdad, hay que llamar con dry_run=False. Cada paso tiene un tipo (warmup/interval/recovery/cooldown/rest), una duracion en minutos y un objetivo opcional:
Args: params: date (YYYY-MM-DD), sport (por defecto cycling), name, steps[], description?, dry_run, response_format (markdown|json). Returns: str: en dry_run, la previsualizacion (pasos + duracion estimada). Si se ejecuta de verdad, el workout_id creado y la confirmacion de programacion; o "Error: ...". |
| garmin_list_workoutsA | Lista los entrenos guardados en tu biblioteca de Garmin (con su id). Util para obtener el workout_id que necesitan garmin_schedule_workout (reprogramar) o garmin_delete_workout. Args: params: limit (1-100), response_format (markdown|json). Returns: str: lista con id, nombre, deporte y duracion_s; o "Error: ...". |
| garmin_delete_workoutA | Borra un entreno guardado de tu biblioteca de Garmin. SEGURIDAD: requiere confirm=True. Sin confirmacion no borra nada. Args: params: workout_id (str), confirm (bool), response_format (markdown|json). Returns: str: confirmacion de borrado o aviso de que falta confirmar; o "Error: ...". |
| garmin_add_body_compositionA | Guarda en Garmin Connect una medicion de peso y composicion corporal. Util si tu bascula no se sincroniza con ninguna app: le dictas los valores y
quedan registrados en Garmin, donde luego los lee SEGURIDAD: por defecto NO escribe (dry_run=True): devuelve una previsualizacion. Llama con dry_run=False para guardarlo. Args: params: weight_kg (obligatorio), date?, time?, body_fat_pct?, water_pct?, muscle_mass_kg?, bone_mass_kg?, visceral_fat?, bmi?, basal_met_kcal?, metabolic_age?, dry_run, response_format. Returns: str: previsualizacion de lo que se guardaria, o confirmacion del registro; o "Error: ...". |
| fitness_profileA | Muestra el perfil configurado (FCmax, FC reposo, edad, ritmo umbral). Estos valores se guardan en el .env (USER_MAX_HR, USER_RESTING_HR, USER_AGE, USER_THRESHOLD_PACE) y los usan por defecto las herramientas de zonas cuando no se los indicas explicitamente. Asi no tienes que repetirlos cada vez. Args: params: response_format (markdown|json). Returns: str: los valores del perfil, o un aviso de que estan sin configurar. |
| fitness_planned_vs_actualA | Compara los entrenos PLANIFICADOS con las actividades REALMENTE ejecutadas en un rango de fechas, y calcula la adherencia al plan. "Planificado" = solo entrenos estructurados de tu biblioteca que hayas programado (no las actividades ya completadas que Garmin lista en el calendario). El cruce es por dia: si un dia tenia entreno programado y hubo actividad, se considera cumplido; si habia plan y no hubo actividad, no realizado; si hubo actividad sin plan, extra. Args: params: start (YYYY-MM-DD), end? (YYYY-MM-DD, por defecto = start), response_format (markdown|json). Returns: str: resumen con dias planificados, cumplidos, no realizados y extra, porcentaje de adherencia, y el detalle por dia; o "Error: ...". |
| fitness_weekly_summaryA | Resumen de entrenamiento y recuperacion de un periodo (por defecto una semana). Cruza Garmin (actividades, km, horas) con Apple (sueño medio, HRV media, FC reposo media, pasos, entrenos de fuerza). Requiere haber importado Apple para la parte de recuperacion. Args: params: start (YYYY-MM-DD), end? (por defecto start+6 dias), response_format. Returns: str: resumen agregado del periodo; o "Error: ...". |
| fitness_recovery_vs_trainingA | Cruza, dia a dia, lo que entrenaste (Garmin + Apple) con tu recuperacion (HRV, sueño y FC en reposo de Apple). Sirve para ver correlaciones: si la HRV baja tras dias duros, si duermes peor los dias de fuerza, etc. Requiere Apple importado para la recuperacion. Args: params: start (YYYY-MM-DD), end? (por defecto start+6 dias), response_format. Returns: str: tabla por dia con entreno y metricas de recuperacion; o "Error: ...". |
| fitness_body_compositionA | Evolucion de peso, % de grasa y masa muscular/magra en un periodo. Lee de Garmin (bascula / entradas manuales) y de Apple Health, y muestra los valores por fecha mas la tendencia (diferencia entre el primero y el ultimo). Pensado para seguimiento mensual, no para pesarse a diario. Args: params: start (YYYY-MM-DD), end? (por defecto start+6 dias; usa un rango amplio, p. ej. 3 meses, para ver tendencia), response_format. Returns: str: series por fecha y tendencias de peso/grasa/musculo; o "Error: ...". |
| fitness_daily_briefA | Resumen de la mañana: como vienes de recuperacion y que tienes planificado hoy. Junta en una sola llamada: recuperacion de anoche (HRV, sueño y FC reposo de Apple, con Garmin como respaldo), lo que entrenaste ayer, y los entrenos que tengas programados para hoy en Garmin. Args: params: date? (YYYY-MM-DD, por defecto hoy), response_format. Returns: str: brief del dia; o "Error: ...". |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/bynoe17/DkwtMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server