garmin-connect-mcp-server
Provides access to Garmin Connect data including daily health metrics, sleep, activities, training status, and body composition via read-only tools.
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-mcp-serverwhat's my training status?"
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-server
A read-only Model Context Protocol (MCP) server that gives Claude Desktop access to your Garmin Connect data — daily health metrics, sleep, activities, training status, and body composition.
Non-technical? Follow the step-by-step QUICKSTART — or, if you use Claude Cowork/Claude Code, paste the one-shot prompt in SETUP-PROMPT.md and let Claude do the setup for you.
Why this exists
Garmin's official APIs (Health API, Activity API) are only available through the
Garmin Connect Developer Program,
which is gated to approved businesses. This server instead uses the well-established
unofficial garminconnect Python
library, which signs in with your own Garmin account using the same OAuth flow as the
official Garmin Connect mobile app. No developer program membership, no API keys — you
log in once and the long-lived tokens refresh themselves on use.
Unlike most Garmin MCP servers (which expose 60–110 thin endpoint wrappers), this one follows Anthropic's tool-design guidance: six consolidated, purpose-built tools that return compact tables designed for an LLM's context window.
Related MCP server: DkwtMCP
Tools
Tool | What it returns |
| Per-day steps, resting HR, overnight HRV + status, Body Battery high/low, stress, intensity minutes, active calories (≤31 days/call) |
| Per-night sleep score, quality, stage durations (deep/light/REM/awake), overnight HRV, SpO2, resting HR (≤31 days/call) |
| Activity list with IDs, distance, duration, HR, pace/speed, elevation, training effect; filterable by type (≤90 days/call) |
| One activity in depth: pace/power/cadence/calories, plus lap splits and HR-zone breakdown in |
| Training readiness, training status, acute load, VO2max, HRV status, and 5K/10K/half/marathon race predictions in one call |
| Weight, body fat %, muscle mass, body water, BMI from a Garmin Index scale or manual entries (≤90 days/call) |
All tools are read-only and marked with readOnlyHint — nothing is ever written to
your Garmin account. Tools degrade gracefully: an account with no watch data returns
clearly-empty tables rather than errors (activity-only accounts, e.g. from a Tacx
trainer, still get full activity data).
Requirements
Python 3.12+ (required by
garminconnect0.3.x)A free Garmin Connect account (no device required to test auth; data appears once a device or app syncs to the account)
Claude Desktop to use the tools (optional for development)
Install
With uv (recommended):
uv syncWithout uv (plain venv + pip) — macOS/Linux:
python3 -m venv .venv
.venv/bin/pip install -r requirements.txtWindows (PowerShell):
py -m venv .venv
.venv\Scripts\pip install -r requirements.txtBoth paths create the environment in .venv/, so the Claude Desktop config below is
identical either way.
Authenticate (one time)
uv run python login.py # or: .venv/bin/python login.pyEnter your Garmin email and password (plus MFA code if enabled). OAuth tokens are saved
to ~/.garminconnect and refresh themselves on use. Your password is never stored —
only the tokens are. Re-run the same command whenever tokens expire, or with --force
to switch to a different Garmin account.
To store tokens somewhere else, set the GARMINTOKENS env var — but note it must then
be set in both places: in your shell when running login.py, and in the Claude
Desktop config's env block (GUI apps don't inherit your shell environment):
"garmin": {
"command": "...",
"args": ["..."],
"env": { "GARMINTOKENS": "/path/to/tokens" }
}Test locally (optional)
uv run fastmcp dev inspector server.py # or: .venv/bin/fastmcp dev inspector server.pyThis opens the MCP Inspector in your browser to exercise each tool by hand.
Install in Claude Desktop
Prefer not to hand-edit JSON? The QUICKSTART has a copy-paste prompt that asks Claude (Claude Code, or Claude Desktop with file access) to write this config for you.
Edit claude_desktop_config.json:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
(Claude Desktop → Settings → Developer → Edit Config opens it for you.) Add:
{
"mcpServers": {
"garmin": {
"command": "/ABSOLUTE/PATH/TO/garmin-connect-mcp-server/.venv/bin/python",
"args": ["/ABSOLUTE/PATH/TO/garmin-connect-mcp-server/server.py"]
}
}
}On Windows, command is C:\\...\\garmin-connect-mcp-server\\.venv\\Scripts\\python.exe.
No env block or secrets are needed — auth comes from the token store. Fully quit and
reopen Claude Desktop (it reads the config only on launch), then try:
"What were my Garmin workouts this month?"
Troubleshooting
429/ rate limited during login — Garmin rate-limits its SSO endpoint by IP. Don't retry in a loop; wait 30–60 minutes or switch networks (a phone hotspot changes your IP) and runlogin.pyagain.Authentication failed / token errors — re-run the login script (
uv run python login.pyor.venv/bin/python login.py); tokens die if you change your Garmin password or Garmin revokes them. The running server picks up fresh tokens on the next tool call — no restart needed.Tools return empty tables / all
-— the account has no synced data for that range. Health metrics (sleep, HRV, Body Battery, training status) require a Garmin watch; activities can come from any source that syncs to Garmin Connect (trainer, Zwift, phone app).Login suddenly breaks for everyone — Garmin occasionally changes their SSO flow, which temporarily breaks the unofficial library until it's patched. Update with
uv sync --upgrade(or.venv/bin/pip install -U garminconnect) and retry.Claude Desktop doesn't show the tools — check the config file for JSON errors (a trailing comma breaks the whole file), verify both paths are absolute and the
.venvexists, then fully quit and reopen the app.
How it works
Claude Desktop ──stdio──> server.py (FastMCP, 6 read-only tools)
│
├── reads OAuth tokens from ~/.garminconnect
│ (written once by login.py; auto-refreshed)
│
└── garminconnect (unofficial lib, >= 0.3.6)
└── Garmin Connect private web APIserver.py — the MCP server; never sees your password, only reads tokens.
login.py — one-time interactive sign-in (handles MFA); saves tokens.
Fair warning
This uses Garmin Connect's private web API via your personal account — technically a gray area under Garmin's ToS, though it's the same approach used for years by Home Assistant integrations and many other community projects without issue. Use reasonable request volumes and your own account. This project is not affiliated with or endorsed by Garmin.
Development
uv run python -m compileall server.py login.py # syntax check
uv run fastmcp dev inspector server.py # manual tool testingTool design notes: tools are namespaced garmin_* to compose cleanly with sibling
health MCP servers (Oura, Strava, …); outputs are compact markdown tables (roughly
40 tokens/day-row); date ranges are capped per call with actionable error messages.
License
Available Tools
6 toolsgarmin_get_activity_detailARead-only
Deep-dive a single Garmin activity: distance, time, HR, pace/speed, cadence, power, elevation, calories, training effect — plus lap splits and heart-rate-zone breakdown in 'detailed' mode. Get activity_id from garmin_list_activities first.
| Name | Required | Description | Default |
|---|---|---|---|
| activity_id | Yes | Numeric activity ID from garmin_list_activities. | |
| response_format | No | 'concise' = summary metrics only; 'detailed' adds per-lap splits and HR-zone time. | concise |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true, and description consistently presents a read operation. Adds detail about what the 'detailed' mode returns (lap splits, HR-zone breakdown) beyond annotations. Could mention rate limits or auth, but overall transparent.
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?
Highly concise: a single sentence that front-loads the main purpose, lists key metrics, and provides actionable instruction. No filler.
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, description doesn't need to detail return values. It covers all necessary context: what data is retrieved, the two modes, and prerequisite. Complete for this 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 100%, baseline 3. Description adds meaning by elaborating on response_format values: 'concise' vs 'detailed' with specific added data. This goes beyond the schema's simple enum description.
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 starts with 'Deep-dive a single Garmin activity' and lists specific metrics (distance, time, HR, etc.), clearly stating the tool's purpose. It distinguishes itself from siblings by mentioning how to get the activity_id from garmin_list_activities.
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?
Explicitly instructs to get activity_id from garmin_list_activities first, providing a prerequisite. Explains the two response_format options ('concise' vs 'detailed'). Does not explicitly state when not to use, but the context is clear given sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_get_body_compositionARead-only
Body composition entries (Garmin Index scale or manual) as a table (max 90 days, default last 30). Columns: date, weight_kg, body_fat_pct, muscle_mass_kg, body_water_pct, bmi. Only days with a measurement appear.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | ISO end date (inclusive). Default: today. | |
| start_date | No | ISO start date (inclusive). Default: 29 days before end_date. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds that it returns a table with specific columns, max 90 days, default 30, and only days with measurements, providing full behavioral transparency beyond annotations.
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, front-loaded with the core purpose and key constraints, no wasted words, perfectly concise.
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 optional parameters with full schema descriptions, an output schema exists, and the description covers output shape and constraints, the definition is fully complete for agent decision-making.
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 already describes parameters with 100% coverage (ISO dates, defaults), and the description adds context about the maximum range and default behavior, meaningfully extending 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 the tool returns body composition entries as a table with specific columns and a date range limit, distinguishing it from sibling tools like garmin_get_daily_summary or garmin_get_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?
The description implies usage for retrieving body composition data within a date range, but does not explicitly state when not to use or compare to alternatives; however, sibling tools are distinct enough that the purpose is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_get_daily_summaryARead-only
Day-by-day Garmin health metrics as a compact table (max 31 days, default last 7).
Columns: date, steps, resting_hr (bpm), hrv_avg (ms overnight), hrv_status (balanced/unbalanced/low), bb_high/bb_low (Body Battery 0-100), stress_avg (0-100), intensity_min (moderate + 2x vigorous), active_kcal. For sleep detail use garmin_get_sleep; for workouts use garmin_list_activities.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | ISO end date (inclusive). Default: today in the SERVER's local timezone — near midnight this can differ from the Garmin account's calendar day; pass explicit dates if it matters. | |
| start_date | No | ISO start date (inclusive), e.g. '2026-07-01'. Default: 6 days before end_date. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds valuable behavioral details: max 31-day range, default last 7 days, and the format of the output as a compact table. No contradictions.
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 two well-structured sentences followed by a clear list of columns and sibling references. Every sentence provides necessary information without redundancy.
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 has an output schema and the description lists all columns, the behavioral context is fully covered. Sibling tool references and parameter constraints provide complete context for an AI 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?
Schema coverage is 100% with detailed descriptions for both parameters. The description adds contextual value by stating the maximum range (31 days) and default range (last 7 days), which goes beyond the schema's syntax.
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 that the tool provides daily Garmin health metrics in a compact table format and lists all columns explicitly. It distinguishes itself from sibling tools by referencing garmin_get_sleep and garmin_list_activities for specific use cases.
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 explicitly tells when to use alternatives: for sleep detail use garmin_get_sleep and for workouts use garmin_list_activities. It also implies this tool is for general daily health metrics, providing clear context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_get_sleepARead-only
Garmin sleep data per night as a compact table (max 31 days, default last 7).
Columns: date (wake-up morning), score (0-100), quality, duration, deep, light, rem, awake (H:MM), overnight_hrv (ms), spo2_avg (%), resting_hr (bpm). Note: if the user also wears an Oura ring, oura_* tools report the same nights and may differ slightly; say which source you're citing.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | ISO end date (inclusive). Default: today. Each date refers to the night ENDING that morning. | |
| start_date | No | ISO start date (inclusive). Default: 6 days before end_date. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, which the description implicitly supports. The description adds constraints (max 31 days, default 7 days) and a data-source transparency note about Oura ring discrepancies. No contradictions.
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?
Three sentences efficiently convey purpose, output columns, range, and usage note. No extraneous content; front-loaded with key 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?
With output schema present, the description covers the essential purpose, data shape (columns), and usage constraints. The only minor gap is lack of explicit return format (how rows are organized), but it is implied by 'per night'. Complete enough for a simple read 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 100% with clear definitions of start_date and end_date, including the night-ending interpretation. The description does not add significant meaning beyond the schema, only restating the range. 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 tool retrieves Garmin sleep data per night, specifies a table format with column details, and indicates a maximum 31-day range. This distinguishes it from sibling tools like garmin_get_daily_summary or garmin_get_activity_detail, which cover different data types.
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 explains the default range (last 7 days) and maximum (31 days), and includes a note about Oura ring as an alternative source for sleep data. However, it does not explicitly state when not to use this tool or recommend specific siblings for other purposes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_get_training_statusARead-only
Current Garmin training snapshot in one call: training readiness score, training status (e.g. productive/maintaining/strained), acute load, VO2max, HRV status, and race time predictions (5K/10K/half/marathon). Use this for 'how is my training going / how recovered am I' questions; combine with oura_* readiness for cross-source checks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, so no destructive behavior. Description adds value by listing all returned data fields (readiness, status, load, VO2max, HRV, predictions). Could mention that this is a snapshot at current time, but otherwise transparent.
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: first lists data points, second gives usage guidance. Every word serves a purpose, no redundancy.
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 parameters, readOnlyHint annotation, and output schema present, the description fully covers what the tool returns and when to use it. No 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?
No parameters defined, so description does not need to add parameter semantics. Baseline 4 for zero parameters.
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 explicitly states verb 'get' and resource 'training status' and lists the specific data elements (readiness score, status, acute load, VO2max, HRV, race predictions). It distinguishes from siblings by focusing on training status snapshot, unlike daily summary or activity 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?
Clearly states when to use: 'how is my training going / how recovered am I' questions. Also suggests combining with oura_* for cross-source checks. Lacks explicit when-not-to-use or comparison with other Garmin sibling tools, but usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_list_activitiesARead-only
List Garmin activities in a date range as a compact table (max 90 days, default last 30).
Columns: activity_id (for garmin_get_activity_detail), date, type, name, distance_km, duration (H:MM), avg_hr, max_hr, pace_or_speed, elev_gain_m, aerobic_te (training effect 0-5), anaerobic_te.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max activities to return (newest first). | |
| end_date | No | ISO end date (inclusive). Default: today. | |
| start_date | No | ISO start date (inclusive). Default: 29 days before end_date. | |
| activity_type | No | Filter by Garmin PARENT category only — subtypes are rejected by the API. Subtypes roll up: virtual_ride/mountain_biking -> 'cycling'; treadmill/trail running -> 'running'; strength training/indoor cardio -> 'fitness_equipment'. Omit for all types. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds value by detailing the output format (columns). However, no additional behavioral traits (e.g., data freshness, pagination limit) are disclosed beyond what annotations and parameter schema provide.
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 paragraph with the main purpose first, then a compact list of columns. Every sentence is useful—no redundancy 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?
The description explains the date range defaults, column output, and activity_type rollup. It lacks mention of sorting (newest first, though that's in the limit description) and total count, but given the presence of an output schema and annotations, it is mostly 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 coverage is 100%, giving a baseline of 3. The description adds significant meaning by explaining the activity_type rollup behavior (e.g., virtual_ride -> 'cycling'), which is not in the schema. This extra context justifies a 4.
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 'List Garmin activities in a date range as a compact table', providing a specific verb and resource. It also includes column details and mentions the relationship to garmin_get_activity_detail, but does not explicitly distinguish from siblings.
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 by referencing activity_id 'for garmin_get_activity_detail', hinting at a workflow, but does not provide explicit when-to-use or when-not-to-use guidance compared to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a unique aspect of Garmin data: daily summary, activity detail, training status, body composition, sleep, and activity list. No two tools overlap in purpose, making selection unambiguous.
Tools follow a 'garmin_verb_noun' pattern (e.g., garmin_get_daily_summary, garmin_get_sleep), with 'garmin_list_activities' being the only one using 'list' instead of 'get'. This minor inconsistency is easily understood but breaks the pattern slightly.
With 6 tools covering key health and fitness domains (daily metrics, activities, training, body composition, sleep), the count feels well-scoped and sufficient for a read-only health data API.
The tool surface covers essential read-only operations: retrieving daily summaries, activity details, training status, body composition, sleep, and listing activities. Cross-references between tools indicate thoughtful design, with no obvious missing functionality for the intended purpose.
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.
Garmin data in Claude: 135 tools — activities, sleep, HRV, training, workouts. Free, open source.
Private Apple Health metrics and workout detail for ChatGPT, Claude, and any MCP client.
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that gives Claude access to your Garmin Connect fitness and health data, including steps, sleep, activities, heart rate, and more.1MIT
- 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 gradedqualityCmaintenanceA 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
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/echocharlie/garmin-connect-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server