Garmin Connect MCP
Exposes personal Garmin Connect data, providing tools for retrieving profile, daily stats, heart rate, sleep, HRV, body battery, stress, activities, and workouts.
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 Connect MCPshow my daily stats for today"
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.
Garmin Connect MCP
An MCP server that exposes your personal Garmin Connect data to MCP-capable clients — Claude Desktop, Claude Code, Codex, and Gemini CLI.
The Garmin work is done by the python-garminconnect library; this repo is the thin MCP layer on top: tool definitions, a stdio server, and privacy guardrails that keep raw health payloads out of durable text. Because python-garminconnect relies on Garmin Connect's unofficial client behavior, it can break if Garmin changes login or endpoint behavior.
Setup
cd /path/to/garminconnect-mcp
python3 -m venv .venv
.venv/bin/python -m pip install -e .
cp .env.example .envEdit .env with GARMIN_EMAIL and GARMIN_PASSWORD.
Run once from a terminal to create or refresh saved Garmin tokens:
.venv/bin/garminconnect-mcp loginIf Garmin asks for MFA, the login command prompts for the code in the terminal.
For non-interactive use, set GARMIN_MFA_CODE temporarily.
The MCP server runs over stdio. Configure Codex with this command:
{
"mcpServers": {
"garmin": {
"command": "/path/to/garminconnect-mcp/.venv/bin/garminconnect-mcp"
}
}
}Claude config files are included too:
.mcp.jsonfor project-scoped Claude Code use.docs/claude_desktop_config.jsonfor Claude Desktop.docs/claude.mdfor setup and verification steps.
Gemini CLI config files are included too:
.gemini/settings.jsonfor project-scoped Gemini CLI use.docs/gemini_settings.jsonfor user-scoped Gemini CLI config.docs/gemini.mdfor setup and verification steps.
Related MCP server: Garmin Connect MCP Server
Tools
Connection-only tools:
garmin_connection_statusgarmin_ping
Raw private Garmin data tools:
garmin_profilegarmin_daily_statsgarmin_heart_rategarmin_sleepgarmin_hrvgarmin_body_batterygarmin_stressgarmin_recent_activitiesgarmin_activity
Summarized workout tools:
garmin_workoutsgarmin_scheduled_workoutsgarmin_schedule_workoutgarmin_create_scheduled_workoutgarmin_unschedule_workout
Dates use YYYY-MM-DD. If omitted, tools default to today.
Use garmin_connection_status or garmin_ping for smoke tests. They validate
login without returning profile, health, or account data.
This is a personal local MCP server, and the raw tools intentionally return full Garmin payloads. Avoid pasting those raw responses into docs, examples, issues, or other durable text unless you have sanitized them.
Workout tools return summarized fields instead of raw Garmin payloads. To create
and schedule a new workout, pass Garmin Connect workout JSON to
garmin_create_scheduled_workout; to schedule an existing template, use
garmin_schedule_workout with its workout ID.
Development
scripts/check-private-output.sh
.venv/bin/python -m pytest
.venv/bin/python -m ruff check .
.venv/bin/python -m ruff format --check .
.venv/bin/python -m compileall srcAvailable Tools
16 toolsgarmin_activityC
Get raw private Garmin activity details by activity ID.
| Name | Required | Description | Default |
|---|---|---|---|
| activity_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must fully disclose behavioral traits. It mentions 'private', hinting at authentication requirements, but does not state whether the operation is read-only, how to handle missing activities, data freshness, rate limits, or other critical behaviors. The term 'raw' is vague and could mislead about the response format.
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 with no extraneous words. Essential information is front-loaded (verb + resource). Perfectly concise for a straightforward tool, though could be expanded without harming conciseness.
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?
Given the existence of an output schema, the description need not explain return values. However, it fails to provide context for correct invocation: how to obtain the activity_id (e.g., from garmin_recent_activities), what 'raw' entails, or the implications of 'private'. For a tool with one critical parameter and no schema descriptions, the description is too minimal to ensure correct use.
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% (no parameter descriptions), so the description must compensate. It only says 'by activity ID', which adds minimal meaning beyond the parameter name. Lacks details on the ID format (numeric vs string), how to obtain it, and constraints (e.g., must belong to the authenticated user). This is insufficient for an agent to correctly supply the parameter.
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 the action (Get), resource (raw private activity details), and identifier (by activity ID). It distinguishes from sibling tools like garmin_recent_activities and garmin_workouts, which list or manage activities, while this retrieves a specific one. However, it does not explicitly differentiate from other detail-fetching tools such as garmin_scheduled_workouts or garmin_heart_rate, which also use IDs.
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, such as garmin_recent_activities for listing or garmin_workouts for workout templates. No mention of prerequisites, when not to use, or how to obtain the activity_id (e.g., from recent activities). The description is purely definitional.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_body_batteryA
Get raw private Body Battery data for a date in YYYY-MM-DD format.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits. It mentions 'raw private' but does not clarify behavior for missing data, invalid dates, or if the parameter is omitted, nor does it indicate permissions 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?
The description is a single, efficient sentence that conveys essential information without any superfluous words or repetition.
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 an output schema exists, the description does not explain what 'raw private Body Battery data' entails or what happens if the optional parameter is omitted, which is minimal but acceptable for a simple one-parameter tool.
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%, but the description adds critical meaning by specifying the 'day' parameter must be in 'YYYY-MM-DD format', which goes beyond the schema's bare 'string' type hint.
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 uses a specific verb 'Get' and identifies the resource 'raw private Body Battery data' with a date constraint in YYYY-MM-DD format, clearly distinguishing it from siblings like garmin_heart_rate or garmin_sleep.
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, nor any exclusions or prerequisites, leaving the agent to infer context from the name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_connection_statusA
Check Garmin Connect login without returning personal data.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that no personal data is returned, which is a key behavioral trait. However, it does not mention whether the tool requires prior authentication, rate limits, or what happens on failure—basic context for a connection check.
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?
A single, front-loaded sentence with no redundant words. It immediately conveys the core function and a key constraint, making optimal use of space.
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 zero-parameter tool with an output schema (not shown), the description is nearly complete. It explains the check and the privacy safeguard. A minor gap is not mentioning what the output represents (e.g., a boolean status), but since the output schema exists, this is acceptable.
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?
There are no parameters, so the schema is trivially covered. The description adds value beyond the schema by clarifying the tool's purpose (status check) and side effect (no personal data), which informs an agent that this is a safe, non-invasive operation.
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 states the specific action ('Check Garmin Connect login') and explicitly clarifies what it does NOT do ('without returning personal data'), distinguishing it from sibling tools that might return personal data like garmin_profile or garmin_daily_stats.
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 implies usage for verifying login status without exposing personal information, but it does not explicitly state when to use this tool versus alternatives like garmin_ping (which might be a generic connectivity check). No 'when not to use' guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_create_scheduled_workoutB
Upload a Garmin workout JSON payload, then schedule it on a YYYY-MM-DD date.
| Name | Required | Description | Default |
|---|---|---|---|
| day | Yes | ||
| workout_json | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits but only states the basic action sequence. It does not mention side effects (e.g., overwriting existing schedules), authentication requirements, validation rules, or error handling. The tool's behavior remains opaque.
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 a single, front-loaded sentence that directly states the tool's function without wasting words. However, it could be restructured to include brief usage notes, but it remains efficient.
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 having an output schema, the description lacks details about the workflow (e.g., atomicity of upload and schedule), error conditions for invalid JSON, and what happens if the date is in the past. For a tool requiring structured input, this is insufficient.
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 the date format 'YYYY-MM-DD' for the 'day' parameter, which is not in the schema. For 'workout_json', it only says 'workout JSON payload,' offering minimal additional meaning. Since schema coverage is 0%, the description partially compensates but leaves the expected structure of workout_json unspecified.
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 both actions: 'Upload a Garmin workout JSON payload' and 'schedule it on a YYYY-MM-DD date.' The verb+resource combination is specific, and the mention of scheduling distinguishes it from sibling tools like garmin_workouts or garmin_schedule_workout.
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 implies usage context (upload and schedule a workout) but does not explicitly state when to use this tool versus alternatives like garmin_schedule_workout (which may only schedule existing workouts) or garmin_unschedule_workout. No exclusion criteria or prerequisites are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_daily_statsB
Get raw private daily Garmin stats for a date in YYYY-MM-DD format.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description mentions 'private' data but does not disclose important behavioral traits like permission requirements, rate limits, or whether the data is immutable. Agents lack context for safe invocation.
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, front-loaded with the core purpose. No redundant information.
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?
Given the presence of an output schema (context signals), the description may not need to detail return values. However, the lack of behavioral and usage guidance leaves the overall definition incomplete for a data retrieval tool.
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%, so the description must compensate. It adds the date format hint for the 'day' parameter, but does not explain the meaning of null default or any acceptance criteria. Partial improvement over the schema alone.
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 action ('get'), the resource ('raw private daily Garmin stats'), and the required format ('YYYY-MM-DD'). It effectively distinguishes this tool from siblings like garmin_activity or garmin_sleep.
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 (e.g., garmin_recent_activities). Lacks information on prerequisites or exclusions, such as data availability or authentication requirements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_heart_rateA
Get raw private heart-rate data for a date in YYYY-MM-DD format.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description mentions 'raw private heart-rate data' but does not elaborate on what 'raw' means (e.g., timestamps, intervals), whether data may be missing, or any rate limits. With no annotations, the description provides minimal behavioral context.
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?
A single, well-structured sentence that is front-loaded with the action and includes necessary format detail 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?
Given the output schema exists, the description does not need to explain return values. However, it could be more complete by noting typical data granularity or error cases, but it is sufficient for a simple parameter tool.
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 has 0% description coverage, but the description clarifies the date format (YYYY-MM-DD) for the 'day' parameter, adding value beyond the schema definition.
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 raw private heart-rate data for a specific date, with a required format hint (YYYY-MM-DD). This distinguishes it from sibling tools like garmin_hrv (HR variability) or garmin_sleep.
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. For example, it doesn't explain when to prefer this over garmin_daily_stats or garmin_hrv, nor does it mention authentication prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_hrvB
Get raw private HRV data for a date in YYYY-MM-DD format.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only mentions 'gets raw private HRV data' but does not explain what 'raw' entails, whether authentication is needed, rate limits, or error behavior (e.g., for invalid or missing dates).
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 a single, concise sentence with no unnecessary words or repetition. It is front-loaded with the action and resource.
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?
Given the low parameter count (1) and the presence of an output schema, the description does not need to explain return values. It covers the key aspect of the date format and the data type. However, it could benefit from clarifying whether 'private' implies access restrictions or data sensitivity, but overall it is sufficiently complete.
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 the format constraint ('YYYY-MM-DD') for the 'day' parameter, which is useful. However, it does not explain the behavior when the parameter is null (default) or any other constraints like date range or timezone. This partial addition is adequate but not fully compensating.
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 'Get raw private HRV data' with a specific verb and resource, and includes the required date format. While it doesn't explicitly differentiate from siblings like garmin_heart_rate, the mention of 'private HRV' and 'raw' makes the purpose specific enough to avoid confusion.
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 no guidance on when to use this tool versus alternatives, nor any prerequisites or exclusion criteria. It only states what it does without any context for appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_pingA
Check Garmin Connect login without returning personal data.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It states that no personal data is returned, which is good, but it does not mention auth requirements, rate limits, or side effects. Given no parameters, behavior is relatively transparent but could be more explicit.
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?
A single sentence that is front-loaded and contains no extraneous information. Every word earns its place.
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, no-parameter tool with an output schema, the description is adequate. It covers the purpose and key constraint. Minor improvements could mention expected return type, but overall complete.
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?
There are no parameters, so schema coverage is 100%. The description adds no parameter info, which is acceptable; baseline score of 3 is appropriate.
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 verb 'Check' and the resource 'Garmin Connect login', and adds the constraint 'without returning personal data', which distinguishes it from sibling tools that return 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?
No explicit when-to-use or when-not-to-use guidance is provided; however, the simplicity of the tool implies usage for verifying login status. It lacks explicit alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_profileA
Get the raw private Garmin Connect user profile.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description carries full burden. Only says 'raw private' implying sensitivity, but no details on authentication, rate limits, or error conditions. Bare minimal 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?
Single sentence, no extraneous words, efficiently communicates the tool's 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?
Adequate for a simple parameterless tool with an output schema, but lacks usage context and behavioral transparency. Could be more complete for an agent.
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?
No parameters exist, so schema provides full coverage. Description adds value by specifying 'raw private' which clarifies the nature of the profile data 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?
Description clearly states 'Get' verb and 'raw private Garmin Connect user profile' resource, uniquely distinguishing it from sibling tools that target activities, sleep, workouts, etc.
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 vs. alternatives, no prerequisites or exclusions provided. Simply states what it does without context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_recent_activitiesC
List raw private recent Garmin activities.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| start | 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 present, so the description must carry the full burden of behavioral disclosure. It states it lists activities but does not mention that it is read-only, requires authentication, or what 'raw' means. Behavioral traits are minimally disclosed.
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 a single sentence and very concise. While brevity is good, it lacks structural elements like bullet points or separate sections that could improve clarity.
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 tool has an output schema and two parameters, but the description does not explain the return format, the meaning of 'raw' vs processed activities, or the pagination mechanism. It is incomplete for the given complexity.
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 two parameters (limit, start) with zero description coverage. The tool description does not mention the parameters or clarify their meaning (e.g., pagination). The description fails to add any value beyond the schema's default values.
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 action ('List') and the resource ('raw private recent Garmin activities'), giving a specific purpose. It distinguishes from siblings like 'garmin_activity' (likely for a single activity) and 'garmin_daily_stats'. However, 'raw' and 'recent' are slightly ambiguous without further context.
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 'garmin_activity' or 'garmin_daily_stats'. The description 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.
garmin_scheduled_workoutsA
List scheduled Garmin workouts for a calendar month using 1-12 months.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | ||
| month | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description implies a read-only listing but does not explicitly state safety, auth needs, or behavior edge cases (e.g., empty month). Burden of transparency is not fully met.
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, no redundant words, front-loaded with the core action and scope.
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?
Has an output schema so return values need not be explained. However, given low schema coverage and no annotations, the description is minimal. Missing behavioral details like read-only nature or data source context.
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% with no parameter descriptions. Description adds context for month (1-12) but not for year. Partial compensation for schema gap.
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 verb 'List', resource 'scheduled Garmin workouts', and scope 'for a calendar month using 1-12 months'. It distinguishes from sibling tools like create/unschedule.
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?
Indicates the month parameter range (1-12), providing a usage constraint. However, it does not explicitly state when to use vs alternatives or any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_schedule_workoutB
Schedule an existing Garmin workout template on a YYYY-MM-DD date.
| Name | Required | Description | Default |
|---|---|---|---|
| day | Yes | ||
| workout_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the basic action, omitting details such as whether scheduling replaces an existing entry, behavior on invalid IDs, idempotency, or error handling.
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 very concise (one sentence, 10 words) and front-loaded with the action and key constraint. However, it may be overly terse, missing some useful contextual information without being wasteful.
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?
Given a simple tool with 2 parameters and an output schema (not shown), the description covers the basic purpose but lacks details on edge cases, prerequisites, or result behavior. It is minimally adequate for a straightforward operation.
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%, and the description adds minimal value: it explains the format for 'day' (YYYY-MM-DD) but does not explain 'workout_id' (e.g., how to obtain it, that it refers to a template). The description does not compensate for the lack of schema descriptions.
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 action ('Schedule') and the resources ('existing Garmin workout template' and 'YYYY-MM-DD date'). It effectively distinguishes from sibling tools like garmin_create_scheduled_workout (which likely creates new templates) and garmin_unschedule_workout.
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 implies usage for scheduling an existing template on a date, but does not provide explicit guidance on when to use this tool versus alternatives (e.g., garmin_create_scheduled_workout) or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_sleepA
Get raw private sleep data for a date in YYYY-MM-DD format.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the data is 'private' and 'raw', implying sensitivity, but does not mention authentication needs, rate limits, or what happens when the parameter is omitted (default null). It partially compensates but lacks depth.
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?
One concise sentence that front-loads the action and resource, with no wasted words. Every part earns its place.
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?
Given the single parameter, presence of an output schema, and the tool's simplicity, the description is nearly complete. It could mention that it returns sleep stages or limitations, but overall it is adequate for a straightforward data retrieval tool.
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 0% description coverage, so the description adds crucial meaning by specifying the date format 'YYYY-MM-DD'. This compensates for the schema's lack of detail, though it does not explain the meaning of 'default null'.
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 verb 'Get' and the resource 'raw private sleep data', and specifies the required date format 'YYYY-MM-DD'. This distinguishes it from sibling tools like garmin_activity or garmin_daily_stats.
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. It neither mentions context nor exclusions, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_stressB
Get raw private stress data for a date in YYYY-MM-DD format.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden but only states it gets data. It does not disclose authentication needs, rate limits, or what 'private' implies. The output schema exists but its structure is not described.
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 a single concise sentence, front-loaded with the core purpose. No extraneous content.
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 one-parameter tool with an output schema, the description is minimally adequate but lacks details on output content and usage context. Sibling tool diversity suggests need for clearer differentiation.
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 the date format 'YYYY-MM-DD' for the 'day' parameter, which is valuable given 0% schema coverage. However, it does not explain default behavior or whether the parameter is required.
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 'raw private stress data' for a date, specifying the verb 'Get' and the resource 'raw private stress data'. It distinguishes from sibling tools like garmin_heart_rate or garmin_sleep by focusing specifically on stress 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?
No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites, when not to use it, or comparison to sibling tools like garmin_daily_stats which might also include stress data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_unschedule_workoutB
Remove a Garmin workout from the calendar without deleting the template.
| Name | Required | Description | Default |
|---|---|---|---|
| scheduled_workout_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Only discloses that the template is kept, but lacks details on error conditions, idempotency, or authorization needs. Annotations are absent, so description carries full burden but is insufficient.
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, no wasted words, front-loaded with the core action.
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?
Adequate for a simple single-parameter tool, but could mention return value or success/failure behavior; output schema exists so not required.
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 does not explain what scheduled_workout_id is or how to obtain it; adds minimal meaning 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?
Clearly states the action 'Remove' and resource 'workout from the calendar', and explicitly distinguishes from deletion with 'without deleting the template'.
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 siblings like garmin_schedule_workout or garmin_create_scheduled_workout; no preconditions or exclusions mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_workoutsC
List saved Garmin workout templates with summarized fields.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| start | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only states that the tool lists templates with summarized fields, but does not clarify pagination (despite limit/start parameters), read-only nature, or any side effects. The word 'List' implies reading, but not explicit.
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 a single concise sentence of 8 words, but this brevity sacrifices essential details like parameter usage and behavioral context. It is appropriately short for the tool's simplicity, but could be restructured to add value.
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?
Given the simple tool with 2 parameters and no annotations, the description omits pagination, parameter explanations, and differentiation from siblings like garmin_scheduled_workouts. The presence of an output schema (unseen) may compensate slightly, but the description remains incomplete.
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 by explaining the limit and start parameters. It fails to mention them at all, leaving the agent without guidance on how to use pagination.
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 uses a specific verb ('List') and resource ('saved Garmin workout templates') with an additional qualifier ('summarized fields'), clearly distinguishing it from sibling tools like garmin_activity (single activity) and garmin_scheduled_workouts (scheduled workouts).
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 no guidance on when to use this tool vs. alternatives, such as garmin_scheduled_workouts or garmin_recent_activities. The single sentence lacks context for when to choose it over siblings.
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.
16 tool updates
v0.1.0- First observed
garmin_activity - First observed
garmin_body_battery - First observed
garmin_connection_status - First observed
garmin_create_scheduled_workout - First observed
garmin_daily_stats - First observed
garmin_heart_rate - First observed
garmin_hrv - First observed
garmin_ping - First observed
garmin_profile - First observed
garmin_recent_activities - First observed
garmin_schedule_workout - First observed
garmin_scheduled_workouts - First observed
garmin_sleep - First observed
garmin_stress - First observed
garmin_unschedule_workout - First observed
garmin_workouts
TDQS
Most tools target distinct data types or actions, but there is direct overlap between garmin_connection_status and garmin_ping, both described as checking login status without returning personal data. Also, workout scheduling tools (garmin_create_scheduled_workout vs garmin_schedule_workout) may cause slight confusion, though descriptions clarify differences.
All tools follow a consistent 'garmin_' prefix followed by snake_case nouns or verb-noun phrases (e.g., garmin_activity, garmin_create_scheduled_workout). The naming pattern is uniform and predictable.
With 16 tools covering diverse health and fitness data (activities, body battery, heart rate, sleep, stress, workouts, profile, etc.), the count is well-scoped for a personal data access server. Each tool serves a clear purpose without being excessive.
The tool set covers core query and some mutation operations for Garmin data. However, gaps exist: no tool to delete workout templates (only unschedule), no activity deletion, and no date-range filtering for activities beyond recent. Overall, minor missing features for a comprehensive Garmin management surface.
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.
- SomviaOAuthapp.somvia
Private Apple Health metrics and workout detail for ChatGPT, Claude, and any MCP client.
MCP server for Withings health data — sleep, activity, heart, and body metrics.
Pace is a remote MCP server that exposes wearable and fitness data to Claude via the Model Context Protocol. It connects to Garmin, Oura, Whoop, Polar, Fitbit and 20+ devices and provides 15 tools for querying sleep, activity, recovery, and training data. Hosted on Google Cloud Run, OAuth 2.1 authentication, Streamable HTTP transport. Instructions: First you need to create an account at: https://pacetraining.co and connect your wearables. After that you can connect the remote Server via Custom Connector in Claude and OAuth 2.1 Flow startet.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceConnects to Garmin Connect and exposes your fitness and health data (activities, sleep, heart rate, steps, body composition) to Claude and other MCP-compatible clients.1,089MIT
- AlicenseNot gradedqualityCmaintenanceConnects Garmin Connect data to MCP-compatible clients, providing access to fitness activities, health metrics, and training plans. It supports advanced features like headless 2FA and automated MFA retrieval to enable seamless health data interaction through natural language.1MIT
- AlicenseNot gradedqualityDmaintenanceConnects to Garmin Connect and exposes fitness and health data (activities, steps, heart rate, sleep, body composition) to MCP-compatible clients like Claude.MIT
- AlicenseNot gradedqualityCmaintenanceMCP server to interact with Garmin Connect, enabling retrieval of health, activity, and device data through natural language.63MIT
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/LePomas/garminconnect-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server