garmin-athletics-mcp
Provides read-only access to Garmin athletics and wellness data, including daily health, recovery snapshots, performance metrics, workouts, and trends from a Garmin Forerunner 55.
Click on "Deploy 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-athletics-mcpHow is my recovery looking 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 Athletics MCP
A private, read-only Model Context Protocol server that gives local Codex and Claude Desktop sessions access to athletics and wellness data from a Garmin Forerunner 55.
Security model
Runs locally over MCP
stdio; it does not open a network port.Uses the unofficial
garminconnectpackage and can require maintenance if Garmin changes its private endpoints.Accepts Garmin credentials only through the interactive admin login command.
Stores Garmin session tokens under the current Windows user profile, never in MCP configuration.
Exposes read-only MCP tools. Login, deletion, workout upload, scheduling, and account changes are not tools.
Stores normalized records in SQLite and does not archive raw Garmin API responses.
GPS routes are intentionally not fetched, stored, or exposed.
This project provides training context, not medical advice or diagnosis.
Related MCP server: DkwtMCP
What is implemented
The server exposes these read-only tools:
get_daily_healthget_recovery_snapshotget_performance_metricslist_workoutsget_workout_details(splits and metrics only; no GPS)compare_latest_workoutget_athletics_trendsget_recent_athletics_trends
Every information request attempts a fresh Garmin fetch. Calls for the same data within 60 seconds are coalesced so a single agent response cannot hammer Garmin. If Garmin is unavailable, the response may use the timestamped local cache and includes a warning.
The Forerunner 55 provides running VO2 max, recovery time, race predictions, sleep, Body Battery, stress, heart rate, steps, calories, intensity minutes and workout data. Newer features such as HRV Status and Training Readiness are returned as unavailable when the account does not contain them; the server never fabricates substitutes.
Installation
Python 3.12 or newer is required.
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -e ".[dev]"
.\.venv\Scripts\python.exe -m pytestThis workspace already has Python 3.12, .venv, and the development dependencies installed.
First local login
Close screen-sharing or recording software before entering credentials. From PowerShell in this directory, run:
.\.venv\Scripts\garmin-athletics-admin.exe loginEnter the Garmin email, password and MFA code only in that local terminal. The command saves session tokens under:
C:\Users\dan\AppData\Local\GarminAthleticsMCP\tokensThe password and MFA code are not saved. Do not paste either into Codex, Claude, source files, MCP configuration, or chat.
Check the connection:
.\.venv\Scripts\garmin-athletics-admin.exe doctorImport all eight months of history
After login, run:
.\.venv\Scripts\garmin-athletics-admin.exe backfill --days 245 --delay 2The importer is conservative and resumable. Existing complete days are preserved, failures are reported, and rerunning the same command retries gaps. Use --force only when you intentionally want to re-fetch completed days.
Codex configuration
The repository includes .codex/config.toml. It launches this server through the project virtual environment and points it at the shared Windows-local data directory.
After login:
Restart Codex or start a new task for this trusted workspace.
Confirm the
garmin_athleticsMCP server appears.Ask:
Use Garmin Athletics to show today's health data.
The OpenAI documentation MCP installer was blocked by Windows while this project was built, so the project configuration should be verified in the live Codex UI after restart.
Claude Desktop configuration
An example entry is available at config/claude_desktop_config.example.json.
Your existing Claude configuration is:
C:\Users\dan\AppData\Roaming\Claude\claude_desktop_config.jsonPreserve its existing keys. Add the example's mcpServers object at the top level, then fully restart Claude Desktop. Do not replace the entire existing file with the example.
Useful prompts
Use Garmin Athletics to assess my recovery context today. Separate observed data from interpretation.Compare my latest run with similar runs from the previous 90 days.Show my running volume, pace and VO2 max trends for the last eight months.Show the splits and heart-rate zones for workout 123456789.
Local administration
Check paths and authentication:
.\.venv\Scripts\garmin-athletics-admin.exe doctorDelete the local SQLite database and tokens:
.\.venv\Scripts\garmin-athletics-admin.exe erase --yesDeletion is intentionally unavailable through MCP. After erasing, rerun login to reconnect.
Development verification
.\.venv\Scripts\python.exe -m ruff check .
.\.venv\Scripts\python.exe -m pytest -vvThe tests use mocked Garmin responses. They do not require credentials or contact Garmin.
Troubleshooting
Authentication required: rerun the local
logincommand.429 or throttling: stop retrying and wait before using
doctoragain.Unsupported metric: confirm the Forerunner 55 actually records it; the server returns an availability marker.
Cached response: inspect
source,served_at,fetched_at, andwarningin the tool result.Client cannot start server: verify the absolute Python path in the client configuration and restart the client.
See SECURITY.md and docs/ARCHITECTURE.md for the data boundary and implementation layout.
Available Tools
8 toolscompare_latest_workoutC
Compare the latest workout with median values from similar workouts.
| Name | Required | Description | Default |
|---|---|---|---|
| lookback_days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosure. It implies a read-only comparison but does not explain what happens with insufficient data, how 'similar' is determined, or any side effects or limitations. The description adds no behavioral context beyond the plain 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 a single, efficient sentence that front-loads the primary action ('Compare'). It is appropriately concise for a simple read operation, though it omits detail that would make it more complete.
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 no annotations, no output schema, and one poorly documented parameter. The description only states the core purpose, leaving ambiguity around the meaning of 'similar workouts' and the effect of lookback_days. It does not explain expected output or prerequisites, making it incomplete for an agent to decide if this tool fits the user's request.
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 one parameter (lookback_days) with 0% schema description coverage, and the description does not mention this parameter at all. The agent cannot infer what 'lookback_days' controls or how it relates to 'similar workouts', so the description fails to compensate for the lack of schema documentation.
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 the specific verb 'Compare' and identifies the resource as 'the latest workout' against 'median values from similar workouts'. This clearly distinguishes it from sibling tools like list_workouts or get_workout_details, which are about retrieving data, not comparing.
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 given about when to use this tool versus alternatives. It does not mention exclusions, alternatives, or the context in which a comparison is preferred. The agent is left to infer usage solely from the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_athletics_trendsC
Summarize training volume, pace, wellness coverage, and available VO2 max history.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | ||
| start_date | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosure. 'Summarize' implies a read-only operation, and the listed metrics indicate what information is returned. However, it does not describe edge cases (e.g., missing data), data granularity, or other behavioral traits, leaving some gaps for an agent.
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 of 13 words, front-loading the core functionality. Every word contributes meaning, with no repetition or fluff.
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 only two simple parameters and no output schema, the description is incomplete. It fails to explain the date range semantics, expected output format, or how the summary handles missing data. An agent would have to guess at important operational details.
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 does not mention the start_date or end_date parameters at all. An agent cannot infer date formats, inclusivity, or how these dates affect the summary, forcing reliance on the raw schema which only provides type and title.
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 ('Summarize') and names distinct resources (training volume, pace, wellness coverage, VO2 max history). It is clear about what the tool does, but it does not explicitly differentiate from sibling tools like get_performance_metrics or get_recent_athletics_trends.
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 such as get_recent_athletics_trends. There is no mention of appropriate contexts, exclusions, or comparisons to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_daily_healthA
Fetch sleep, heart rate, Body Battery, stress, steps, calories and related data for a day.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | today |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries full responsibility. 'Fetch' indicates a read operation, but no other behavioral traits are disclosed—such as how daily data is aggregated, default timezone, or response shape. The phrase 'related data' is vague.
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 one sentence, front-loaded with the action, and lists all relevant metrics without filler. 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 one-parameter read tool with no output schema, the description sufficiently enumerates the returned data categories. It doesn't describe response format, but that is less critical given the tool's simplicity.
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 only parameter 'day' has no description. The text 'for a day' references the parameter but does not explain accepted date formats or the meaning of the default 'today'. This minimal addition does not fully compensate for the missing schema info.
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 ('Fetch') and names the exact data categories (sleep, heart rate, Body Battery, stress, steps, calories), clearly distinguishing it from sibling tools focused on recovery, performance, or 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 clearly conveys the scope: a broad daily health summary. This implies when to use it, but it does not explicitly rule out alternatives or name corner cases, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_performance_metricsC
Fetch available VO2 max, recovery, race-prediction and training-status metrics.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | today |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for disclosing behavior. It only says 'available' metrics, which is vague, and does not state whether this is read-only, how the 'day' parameter affects results, or what happens if no data exists. No side effects or limitations are mentioned.
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 that is front-loaded with the action and key metric types. It contains no filler words or redundant information, so 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?
The tool has a simple schema and no output schema, but the description still leaves gaps. It lists what metrics are fetched but not how the optional 'day' parameter modifies results, what 'available' means, or the response structure. Given the sibling tools, a sentence clarifying scope would improve completeness.
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 one parameter 'day' with no description (coverage 0%), and the tool description does not mention it at all. The name 'day' provides minimal meaning, but its format, allowed values, and effect on the fetched metrics are unexplained.
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 'Fetch' and lists concrete metric categories (VO2 max, recovery, race-prediction, training-status), clearly stating what the tool provides. It does not explicitly distinguish from siblings like get_recovery_snapshot, but the scope is 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?
No guidance is provided on when to use this tool versus alternatives. The description does not mention any context, prerequisites, or exclusions, leaving the agent to infer usage purely from the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_athletics_trendsC
Convenience trend summary for the last 7 to 366 days.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. It discloses a valid input range (7-366 days) but does not state whether the operation is read-only, what the summary includes, or any output format or limitations, offering only 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?
The description is a single sentence, which is efficient and front-loaded with the key phrase 'trend summary.' The word 'Convenience' adds no technical value and could be removed, but overall it is appropriately sized for a one-parameter tool.
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?
With no output schema and no annotations, the description should explain what the trend summary includes (e.g., metrics, format), but it only provides a time range. It leaves significant gaps about content and behavior, especially given the existence of the more comprehensive sibling get_athletics_trends.
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 one parameter (days) with 0% description coverage. The description says 'last 7 to 366 days,' which implicitly explains the days parameter's purpose (lookback period) and valid range, adding meaning beyond the schema. However, it could be more explicit about how the parameter controls the period.
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 says 'Convenience trend summary for the last 7 to 366 days,' which indicates it provides a summary of recent trends over a specified period, matching the tool name. However, it lacks a specific action verb and does not differentiate itself from the sibling get_athletics_trends, leaving its unique purpose unclear.
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?
There is no guidance on when to use this tool instead of get_athletics_trends or other health/performance tools. The word 'convenience' hints at a simplified alternative, but no explicit comparison, exclusions, or when-to-use instructions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recovery_snapshotC
Fetch daily recovery and available performance context. Not medical advice.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | today |
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 disclosing behavior. It does not state that the operation is read-only, describe the return format, mention permissions, rate limits, or any side effects. 'Fetch' implies reading but conveys no explicit behavioral traits, and the disclaimer is not behavioral.
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 short and front-loaded with purpose, using only two sentences. The 'Not medical advice' disclaimer is somewhat tangential but adds important context for health-related data, so it earns its place without being wordy.
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 tool's simplicity (one parameter, no output schema), the description covers the basic purpose but is incomplete for safe autonomous invocation. It lacks usage guidance, parameter explanation, and any behavioral context, making it minimally viable at best.
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 'day' parameter. The description does not mention the parameter at all, leaving the agent without information about how to specify day, format, or acceptable values beyond the schema's default.
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 ('Fetch') and the resource ('daily recovery and available performance context'), which conveys a specific purpose. However, it does not explicitly distinguish itself from sibling tools like get_daily_health or get_performance_metrics, so it falls short of a 5.
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 the sibling tools, and there are no alternatives or exclusions mentioned. The only additional line is a disclaimer ('Not medical advice'), which does not help with usage decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workout_detailsA
Fetch workout splits and details without downloading GPS route data.
| Name | Required | Description | Default |
|---|---|---|---|
| activity_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral transparency. It does reveal an important behavior: it excludes GPS route data, making clear what the tool does not return. However, it does not mention response format, pagination, or required permissions, but for a simple read operation this is arguably sufficient.
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 concise sentence that states exactly what the tool does and what it intentionally omits. No filler or 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?
For a simple one-parameter tool with no output schema, the description adequately explains the tool's purpose and its scope. It tells the user what to expect (splits and details) and what not to expect (GPS route data). It could be more explicit about what 'details' include, but it is complete enough for basic usage.
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 has only one parameter (activity_id) with zero description coverage. The description does not mention the parameter at all, relying entirely on the parameter name. Since schema coverage is 0%, the description should compensate but fails to explain the format, source, or how to obtain a valid activity_id (e.g., from list_workouts).
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 ('Fetch') and identifies the resource ('workout splits and details'). It also distinguishes the tool from siblings by explicitly stating 'without downloading GPS route data', making it clear this is for lightweight detail retrieval, not full route 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 provides clear usage context: use this tool when you need workout splits and details but do not need GPS route data. It implies a lightweight alternative to route-downloading tools, though it does not explicitly name alternatives or state 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.
list_workoutsA
List read-only normalized workout summaries in a bounded date range.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| end_date | Yes | ||
| start_date | Yes |
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 key traits: read-only operation and normalized summaries. However, it does not mention pagination, ordering, date format expectations, or behavior when no workouts exist in the range.
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, focused sentence that front-loads the core purpose and key constraints. It contains no fluff or 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?
The description is adequate for a basic list tool but lacks details on output format, date formatting, limit semantics, and relationship to sibling tools. Given the absence of an output schema and annotations, more context is needed for full completeness.
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, so the description must compensate. It adds meaning to start_date and end_date by mentioning a bounded date range, but it does not explain the limit parameter or expected date formats, leaving the compensation incomplete.
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 lists read-only normalized workout summaries within a bounded date range. The verb 'list' and resource 'workout summaries' are specific, and it distinguishes from sibling tools like get_workout_details by focusing on 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 such as get_workout_details or get_performance_metrics. The usage context is only implied by the name and description, with no explicit use cases or exclusions.
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.
8 tool updates
v0.1.0- First observed
compare_latest_workout - First observed
get_athletics_trends - First observed
get_daily_health - First observed
get_performance_metrics - First observed
get_recent_athletics_trends - First observed
get_recovery_snapshot - First observed
get_workout_details - First observed
list_workouts
TDQS
Scored across 8 tools
Some tools have overlapping focus: get_recovery_snapshot and get_performance_metrics both include recovery data, while get_athletics_trends and get_recent_athletics_trends are similar except for time range. However, most tools have clearly distinct targets (daily health vs workouts vs trends).
Most tools follow a consistent 'get_' or 'list_' verb+noun pattern, with 'compare_latest_workout' as a minor deviation. The naming is readable and predictable overall.
Eight tools is well-scoped for an athletics data server, covering health, recovery, performance, workouts, and trends without bloat or sparseness.
The toolset covers the core read-only analytics domain well: daily health, recovery, performance metrics, workout listings/details/comparison, and trends. It lacks advanced features like fitness age or training load, but the main workflows are supported.
Maintenance
Related MCP Connectors
Garmin data in Claude: 135 tools — activities, sleep, HRV, training, workouts. Free, open source.
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.
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
- AlicenseAqualityBmaintenanceA read-only MCP server that gives Claude Desktop access to your Garmin Connect data — daily health metrics, sleep, activities, training status, and body composition.6MIT
- AlicenseAqualityBmaintenanceLocal MCP server that connects Claude Desktop with Garmin and Apple Health data to read training and recovery, estimate heart rate and pace zones, analyze performance, and create structured workouts.22MIT
- AlicenseNot gradedqualityBmaintenanceA local, single-user, read-only MCP server that gives Claude Code access to your Garmin health and training data, exposing tools for health snapshots, training status, run details, body metrics, and training analysis.1MIT
- AlicenseNot gradedqualityBmaintenanceA local, read-only MCP server that gives Claude access to your Garmin health and training data, exposing tools for health snapshots, training status, run details, body metrics, and training analysis.MIT