garmin-mcp
This server provides read-only access to your Garmin Connect fitness data, exposing it to Claude for analysis and insights.
Authentication (
garmin_login): Log in using email/password or environment variables, with MFA support.List Recent Activities (
get_activities): Retrieve recent workouts including distance, duration, average heart rate, and elevation gain, with filtering by sport type (e.g., running, cycling).Activity Detail (
get_activity_detail): Get detailed information about a specific activity, including full summary and splits/lap data.Daily Summary (
get_daily_summary): Fetch daily stats such as steps, calories burned, and active minutes for a given date range.Recovery Metrics (
get_recovery_metrics): Access sleep data, Body Battery level, HRV (Heart Rate Variability), and resting heart rate for a specific day.Training Zones (
get_training_zones): View your configured heart rate and power training zones.Training Status (
get_training_status): Check training load/status, VO2 max estimate, personal records, and race time predictions.
Provides read-only access to Garmin Connect data, including activities, activity details, daily summaries, recovery metrics, training zones, and training status.
Click on "Install 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-mcphow did I sleep 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.
MCP Garmin
Servidor MCP que expone tus datos de Garmin Connect (actividades, sueño, recuperación, estado de forma) a Claude, en modo solo lectura.
Instalación rápida (Claude Desktop, sin terminal)
Descarga
mcp-garmin.mcpbde la última release.En Claude Desktop: Configuración → Extensiones → "Install Extension…" → selecciona el fichero.
Rellena tu email y contraseña de Garmin Connect en el formulario. Se guardan solo en tu máquina.
Related MCP server: strava-mcp
Instalación para desarrollo
git clone <url-del-repo>
cd mcp-garmin
cp .env.example .env # rellena tus credenciales
uv sync
uv run pytest # verifica que todo pasaAñade el servidor a tu claude_desktop_config.json o .mcp.json apuntando
a uv run --directory <ruta-del-repo> src/server.py.
Tools disponibles
garmin_login(email, password, mfa_code)— inicia sesión (con soporte MFA).get_activities(start, limit, activity_type)— actividades recientes.get_activity_detail(activity_id)— detalle y splits de una actividad.get_daily_summary(start_date, end_date)— pasos, calorías, minutos activos.get_recovery_metrics(day)— sueño, Body Battery, HRV, FC en reposo.get_training_zones()— zonas de FC y potencia configuradas.get_training_status(day)— Training Load/Status, VO2 max, récords, predicciones.
Alcance
Solo lectura. La escritura de entrenamientos hacia el dispositivo queda
fuera de esta versión (ver docs/superpowers/specs/2026-07-27-garmin-mcp-connector-design.md).
Notas sobre credenciales y requisitos
Instalación vía
.mcpb: Claude Desktop guarda tu email y contraseña de Garmin usando el keychain del sistema operativo (cifrado). Instalación manual (editandoclaude_desktop_config.json/.mcp.jsono el.env):GARMIN_PASSWORDse guarda tal cual, en texto plano, en ese fichero. Es un compromiso asumido para simplificar el flujo de desarrollo/manual; ten cuidado con los permisos de esos ficheros y no los subas a un repo.Requisito de
uven la máquina destino: el.mcpbusa"type": "uv"como runtime, lo que evita tener que preinstalar Python o Node en la máquina, pero no evita necesitaruv:uvdebe estar instalado en la máquina donde se instale la extensión para quemcpbpueda ejecutar el servidor.
Available Tools
7 toolsgarmin_loginA
Inicia sesión en Garmin Connect. Si no pasas email/password, usa las variables de entorno GARMIN_EMAIL/GARMIN_PASSWORD. Si Garmin pide un código de verificación (MFA), vuelve a llamar a esta tool solo con mfa_code relleno.
| Name | Required | Description | Default |
|---|---|---|---|
| No | |||
| mfa_code | No | ||
| password | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral traits. It explains the MFA flow and env var fallback, but does not mention session persistence or side effects (e.g., invalidating previous sessions). Partial transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no redundancy, and the essential information is front-loaded. Every word serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the immediate login flow and MFA handling, but could be more complete by noting that login is a prerequisite for sibling tools and that output exists (output schema present). Adequate but with room for improvement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description only provides usage context for the parameters (email, password, mfa_code) but does not specify formats, constraints, or data types. Adds some meaning but insufficient for full parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool logs into Garmin Connect, specifying the action ('Inicia sesión') and resource. It is distinct from sibling tools which are data retrieval operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on using environment variables as fallback and handling MFA by calling the tool again with only mfa_code. This covers when and how to use the tool effectively.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_activitiesB
Lista actividades/entrenamientos recientes de Garmin Connect, con distancia, duración, frecuencia cardíaca media y desnivel. Usa activity_type (p. ej. 'running', 'cycling') para filtrar por deporte.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| start | No | ||
| activity_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It does not disclose whether authentication is needed, pagination behavior, ordering, or data freshness. These gaps limit an AI agent's ability to invoke correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no extraneous text. Front-loaded with purpose, immediately actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite low complexity (3 params, no nested objects), the description omits critical context: authentication, return format, pagination, error handling. Inadequate for a tool with no output schema or annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must explain all parameters. It explains activity_type but not limit and start, leaving basic pagination semantics undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it lists recent activities from Garmin Connect, specifying included fields (distance, duration, heart rate, elevation). It implies differentiation from sibling tools (e.g., get_activity_detail) but could explicitly contrast list vs detail.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides guidance on using activity_type parameter for filtering but lacks explicit when-to-use or when-not-to-use instructions relative to siblings or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_activity_detailA
Detalle de una actividad concreta de Garmin Connect: resumen y splits/parciales. Usa el 'id' devuelto por get_activities.
| Name | Required | Description | Default |
|---|---|---|---|
| activity_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must disclose behavioral traits. It mentions the output (summary and splits) but does not state read-only nature, authentication prerequisites, or any side effects, leaving gaps for a tool with no annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no unnecessary words, front-loaded with purpose and usage. Efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one param and no output schema, the description adequately covers purpose and usage. It specifies the return content (summary and splits), but could be slightly more complete by mentioning if the response is paginated or includes all fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description adds meaning by linking activity_id to the output of get_activities, but it does not specify format, validation rules, or allowed values beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it provides 'detalle de una actividad concreta' with 'resumen y splits/parciales', distinguishing it from sibling tools like get_activities (list) and get_daily_summary (daily data).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description instructs to use the 'id' returned by get_activities, providing a clear usage context for when to invoke this tool after listing activities.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_daily_summaryB
Resumen diario de pasos, calorías y minutos activos. Formato de fecha YYYY-MM-DD. Si no indicas fechas, usa el día de hoy.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | ||
| start_date | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. It mentions the data returned (steps, calories, active minutes) but does not state whether the operation is read-only, requires authentication, or has any side effects. The date format and default are helpful, but key behavioral traits are missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of three short, front-loaded sentences with no wasted words. It immediately states what the tool returns, then provides format and default context. Every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with two optional parameters and no output schema, the description is mostly adequate. It explains the daily summary metrics, date format, and default. However, it does not clarify whether the tool returns data for a single day or for a range, nor does it describe the output structure (e.g., array of daily summaries). This omission may leave an AI agent unsure of the response format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds format (YYYY-MM-DD) and default behavior (today if omitted) for both parameters. It does not differentiate start_date and end_date individually, but the two sentences provide practical, actionable guidance beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides a daily summary of steps, calories, and active minutes. It identifies the specific resource and action. However, it does not explicitly differentiate from sibling tools like get_activities or get_activity_detail, which could cause confusion for an AI agent choosing between them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a usage guideline for default behavior ('if no dates, use today') and date format. However, it lacks guidance on when to use this tool versus siblings like get_activities for individual activities or get_recovery_metrics for recovery data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recovery_metricsA
Métricas de recuperación de un día: sueño, Body Battery, HRV y frecuencia cardíaca en reposo. Formato de fecha YYYY-MM-DD; por defecto usa el día de hoy. Para varios días, llama varias veces.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the output metrics and date format, but since no annotations are present, it carries the full burden. It does not mention side effects, authentication, or error handling, which is acceptable for a simple read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences that cover purpose, parameters, and usage. Every sentence adds value with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the input format, default, and output metrics. For a simple tool with one parameter and no output schema, this is mostly complete. It lacks details on response structure or data availability, but these are minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema parameter has no description, but the description adds meaning by specifying the date format (YYYY-MM-DD) and default value (today). This fully compensates for the 0% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves recovery metrics (sleep, Body Battery, HRV, resting heart rate) for a single day, which distinguishes it from sibling tools like get_daily_summary. The specific verb and resource are well-defined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides one usage guideline: call multiple times for multiple days. However, it does not compare to sibling tools like get_daily_summary or specify when to prefer this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_training_statusB
Estado de forma y carga de entrenamiento: Training Status/Load, VO2 max, récords personales y predicción de tiempos de carrera. Formato de fecha YYYY-MM-DD; por defecto usa el día de hoy.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description bears full burden for behavioral disclosure. Only date format and default today are noted; no information about authentication, data freshness, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences efficiently convey purpose and parameter details without extraneous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description covers the basics, it lacks details on return value structure and does not explain when to choose this tool over closely related siblings like get_daily_summary or get_recovery_metrics. Given the simple input and no output schema, it is minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning for the only parameter 'day' by specifying date format YYYY-MM-DD and default behavior (today). This compensates for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves training status/load, VO2 max, personal records, and race time predictions. It distinguishes itself from siblings by focusing on aggregated training metrics rather than individual activities or daily summaries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like get_daily_summary or get_recovery_metrics. No prerequisites or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_training_zonesB
Zonas de frecuencia cardíaca y de potencia configuradas en Garmin Connect.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description does not disclose any behavioral traits such as authentication requirements, error handling, or performance characteristics. For a simple read tool, it should at least indicate it requires prior login or that data is user-specific.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, efficiently conveying purpose. However, the description is in Spanish, which may reduce clarity for English-speaking agents. Otherwise, it is well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is sufficient for a no-parameter read tool but lacks details about the output format (e.g., are zones lists with ranges?). It could be more complete by specifying the structure of returned zones.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters and is fully described (100% coverage). The description adds no extra parameter info, which is acceptable since there are none. Baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves heart rate and power zones from Garmin Connect. The resource (training zones) and action (get) are specific. However, it does not explicitly differentiate from siblings like get_training_status, which is distinct but not mentioned.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. The description merely states what it returns without context on prerequisites or limitations. Lacks any 'when to use' or 'when not to use' information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
7 tool updates
v0.1.0- First observed
garmin_login - First observed
get_activities - First observed
get_activity_detail - First observed
get_daily_summary - First observed
get_recovery_metrics - First observed
get_training_status - First observed
get_training_zones
TDQS
Each tool targets a distinct aspect of Garmin Connect: login, activities, daily summary, recovery, training zones, training status, and activity detail. There is no overlap in purpose.
All tools use snake_case with a clear 'get_' prefix for queries and a single 'garmin_login' for authentication. The naming pattern is consistent and predictable.
Seven tools is well-scoped for a fitness data server, covering login, activity listing, daily summary, recovery metrics, training zones, training status, and activity detail. No tool feels superfluous.
The tools cover common read operations for Garmin Connect, but lack filtering by date range for activities and batch retrieval for metrics. Minor gaps that do not severely hinder typical use.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.
Connect Claude to your Intervals.icu watch data for fitness, workout review, and plan writing.
Garmin data in Claude: 135 tools — activities, sleep, HRV, training, workouts. Free, open source.
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables Claude to access and query your Garmin Connect data, including sleep, activities, training load, and health metrics, through a set of read-only MCP tools.281MIT
- AlicenseNot gradedqualityDmaintenanceExposes your Strava data to Claude, enabling training load analysis, activity comparison, and lap splits via conversation.25MIT
- FlicenseNot gradedqualityCmaintenanceProvides Claude with read-only access to Garmin Connect data including daily health metrics, training status, activity details, and trends through 32 tools.-
- FlicenseNot gradedqualityCmaintenanceConnects Garmin watch data to Claude Desktop, allowing users to ask natural language questions about their health and activity data from Garmin Connect.-
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/saryva/garmin-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server