garmin-connect-mcp
The server connects Claude to your Garmin Connect account so you can ask about your health, sleep, workouts, and fitness data in plain English, and also log certain measurements or schedule workouts.
Daily health overview: get a day-at-a-glance summary of steps, calories, heart rate, stress, body battery, and sleep.
Sleep tracking: view sleep duration, sleep stages, sleep score, resting heart rate, and breathing.
Activity data: list activities by date or period, get full activity details, splits, personal records, and totals over a date range.
Fitness and recovery: check HRV, training readiness, VO2 max, fitness age, training status, stress, and Body Battery trends.
Step, heart rate, and weight history: retrieve step counts, heart rate readings, and body weight over time.
Garmin devices and workouts: list devices, saved workout plans, workout details, and scheduled workouts on the training calendar.
Write to Garmin Connect: log body weight, log hydration, create new workout plans, and schedule existing workouts.
Connects to Garmin Connect to retrieve health and fitness data (sleep, heart rate, steps, HRV, stress, body battery, training readiness, VO2 max, weight) and activity history (runs, workouts, splits, personal records), and allows logging weight, hydration, and building/scheduling workouts.
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-connect-mcp How did I sleep last night?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Garmin Connect for Claude
Ask Claude about your Garmin data in plain English.
"How did I sleep last night?" "Show me my runs from the last two weeks." "Am I recovered enough to train hard today?" "How much did I run last month compared to the month before?"
This connects your Garmin Connect account to the Claude Desktop app, so Claude can read your workouts, sleep, heart rate and other health data and talk about them with you.
You do not need to know how to code to use this. The installer asks you a couple of questions and does the rest.
What you need
A Mac or a Windows PC
A Garmin Connect account with a Garmin watch or device
Related MCP server: Garmin Connect MCP Server
Install on a Mac
Open the Terminal app. (Press Cmd + Space, type Terminal, press Enter.)
Copy this line, paste it into the Terminal window, and press Enter:
curl -fsSL https://raw.githubusercontent.com/jharkebusch/garmin-connect-mcp/main/install.sh | bashIt will:
Set up a private, self-contained Python environment (your Mac's own Python is not touched)
Ask for your Garmin email and password, and the security code Garmin sends you
Configure Claude Desktop for you
When it finishes, quit Claude Desktop completely with Cmd + Q and open it
again. Closing the window is not enough.
Then just ask Claude about your Garmin data.
Install on Windows
Open PowerShell. (Press the Windows key, type PowerShell, press Enter.)
Copy this line, paste it in, and press Enter:
irm https://raw.githubusercontent.com/jharkebusch/garmin-connect-mcp/main/install.ps1 | iexIt does the same three things as the Mac installer.
When it finishes, quit Claude Desktop completely and open it again. Closing the window leaves it running in the system tray -- right-click the tray icon and choose Quit.
To sign in again later, run:
& "$env:USERPROFILE\.garmin-mcp\Scripts\garmin-mcp-setup.exe"What Claude can do
Health and wellness
Ask about | Tool |
A day at a glance |
|
Sleep, stages and sleep score |
|
Daily step counts and totals |
|
Resting, low and high heart rate |
|
Heart rate variability and recovery |
|
Stress through the day |
|
Body Battery charge and drain |
|
Whether you are ready to train hard |
|
VO2 max, fitness age, training status |
|
Body weight over time |
|
Workouts and activities
Ask about | Tool |
Activities in a period |
|
Activities on one day |
|
Everything about one activity |
|
Your most recent activity |
|
Kilometre or mile splits |
|
Totals over a period |
|
Personal bests |
|
Your Garmin devices |
|
Saved workout plans |
|
Your training calendar |
|
Recording things (these change your Garmin account)
Ask Claude to | Tool |
Log a body weight |
|
Log water you drank |
|
Build a workout plan |
|
Put a workout on your calendar |
|
Nothing can delete your data. There is no tool that removes an activity, a workout or a weigh-in, so a mistaken request cannot destroy your training history.
Dates in plain English
Every tool understands everyday phrases, so you can just talk normally:
today · yesterday · last night · 3 days ago · last 7 days ·
this week · last month · 2026-08-18 · 2026-08-01 to 2026-08-18
Your privacy and security
Your password is never saved. It is used once during setup to sign in, and then discarded.
Only Garmin's access tokens are stored, in
~/.garminconnect, as a file only your user account can read (0600, inside a0700folder).Nothing is sent anywhere except Garmin. There is no telemetry, no analytics and no third-party server. Your data goes from Garmin to your own Mac and nowhere else.
Everything runs locally on your machine.
Your Garmin data only reaches Anthropic if Claude includes it in a reply, the same as anything else you type into Claude.
Updating
Run the same install command again. It updates in place and keeps you signed in.
If you need to sign in again
Garmin sessions renew themselves and rarely expire. If Claude ever says your login has expired, run this in Terminal:
garmin-mcp-setupIf your Terminal does not recognise that command, use the full path:
~/.garmin-mcp/bin/garmin-mcp-setupUninstalling
On a Mac:
rm -rf ~/.garmin-mcp ~/.garminconnect ~/.local/bin/garmin-mcp-setupOn Windows (PowerShell):
Remove-Item -Recurse -Force "$env:USERPROFILE\.garmin-mcp", "$env:USERPROFILE\.garminconnect"Then remove the "garmin" entry from the mcpServers section of your Claude
Desktop config:
Mac:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Troubleshooting
Claude does not see the Garmin tools.
Quit Claude Desktop fully and reopen it. Closing the window leaves it running in
the background -- on a Mac press Cmd + Q, on Windows quit it from the system
tray icon.
"Your Garmin account is not connected yet."
Run garmin-mcp-setup in Terminal.
"Too many requests." Garmin rate-limits sign-in attempts. Wait about 15 minutes.
A number is missing from a reply. Missing means your device did not record it. Some metrics (HRV, Body Battery, training readiness) need a compatible Garmin watch worn overnight. The tools leave a metric out rather than guessing a value.
For developers
git clone https://github.com/jharkebusch/garmin-connect-mcp.git
cd garmin-connect-mcp
uv venv --python 3.12 && VIRTUAL_ENV=.venv uv pip install -e ".[dev]"
VIRTUAL_ENV=.venv uv run pytestLayout:
src/garmin_mcp/server.py— MCP server and tool registrationsrc/garmin_mcp/session.py— authenticated Garmin client, thread offloadsrc/garmin_mcp/dates.py— plain-English date parsingsrc/garmin_mcp/format.py— trims Garmin JSON into readable textsrc/garmin_mcp/tools/— the tools themselvessrc/garmin_mcp/setup_cli.py— interactive login and Claude configuration
Two design notes:
garminconnectis synchronous, so every call is pushed to a worker thread. Otherwise one slow Garmin request stalls the whole server.Login cannot happen inside a tool call, because Garmin's two-factor step needs an interactive prompt. Setup writes a token file; the server only ever reads it.
A caveat worth knowing
Garmin does not publish a public API. This uses the same interface the Garmin
mobile app uses, via the garminconnect
library. It works well, but Garmin can change that interface at any time and
temporarily break third-party tools. If that happens, re-running the installer
picks up the fix once the underlying library ships one.
This project is not affiliated with, endorsed by, or connected to Garmin Ltd. Use it with your own account and your own data.
Licence
MIT — see LICENSE.
Available Tools
25 toolscreate_workoutA
Create a new time-based workout plan in Garmin Connect.
Builds a warm-up, an optional repeated interval and recovery block, and a cool-down. Set interval_minutes and repeats to 0 for a steady session.
Args: name: What to call the workout, for example "Tuesday intervals". sport: One of running, cycling, walking, swimming, hiking. warmup_minutes: Length of the warm-up. Use 0 to skip it. interval_minutes: Length of each hard interval. Use 0 for a steady session. recovery_minutes: Length of the easy recovery after each interval. repeats: How many times to repeat the interval and recovery pair. cooldown_minutes: Length of the cool-down. Use 0 to skip it.
Inputs: name (required), sport, repeats, warmup_minutes, +3 more. Returns: result
get_activities_on_dayA
List the activities recorded on one specific day.
Args: day: For example "today", "yesterday" or "2026-08-18".
Inputs: day. Returns: result
get_activity_detailsA
Full detail for one activity: distance, time, pace, heart rate, elevation, calories, cadence and training effect.
Get the id from list_activities or get_last_activity first.
Args: activity_id: The numeric id of the activity.
Inputs: activity_id (required). Returns: result
get_activity_splitsA
Per-kilometre or per-mile splits for one activity, showing how pace and heart rate changed through the effort.
Args: activity_id: The numeric id of the activity.
Inputs: activity_id (required). Returns: result
get_body_batteryA
Body Battery energy levels, showing how much was charged and drained each day. Higher is more energy available.
Args: period: For example "last 7 days", "this week" or "2026-08-01 to 2026-08-18".
Inputs: period. Returns: result
get_daily_summaryA
Overall summary of one day: steps, calories, resting heart rate, stress, body battery, intensity minutes and sleep length.
Start here when the user asks "how was my day" or "how am I doing today".
Args: day: A day such as "today", "yesterday", "3 days ago" or "2026-08-18".
Inputs: day. Returns: result
get_date_range_summaryA
Totals across a period: how many activities, total distance, total time and total calories. Good for "how much did I run last month".
Args: period: For example "last 30 days", "this month" or "last week". sport: Optional sport filter such as running or cycling.
Inputs: sport, period. Returns: result
get_devicesA
List the Garmin devices on this account and when each was last used.
Inputs: no named parameters. Returns: result
get_heart_rateA
Heart rate for one day: resting, lowest, highest and the seven-day average resting heart rate.
Args: day: For example "today", "yesterday" or "2026-08-18".
Inputs: day. Returns: result
get_hrvB
Heart rate variability (HRV) for one night, with Garmin's status and the personal baseline range. HRV is a recovery and stress indicator.
Args: day: For example "today", "yesterday" or "2026-08-18".
Inputs: day. Returns: result
get_last_activityA
Full detail for the most recently recorded activity.
Inputs: no named parameters. Returns: result
get_personal_recordsA
Personal bests recorded by Garmin, such as fastest 5K, longest run and best times over standard distances.
Inputs: no named parameters. Returns: result
get_scheduled_workoutsC
Show workouts scheduled on the Garmin training calendar.
Args: period: Currently informational; all upcoming scheduled workouts are returned.
Inputs: period. Returns: result
get_sleepA
Sleep for one night: total time, deep/light/REM/awake breakdown, sleep score, resting heart rate and breathing.
Args: day: The night's date. "last night" and "today" both mean the most recent night. Also accepts "yesterday" or "2026-08-18".
Inputs: day. Returns: result
get_stepsA
Daily step counts over a period, with the total and daily average.
Args: period: For example "last 7 days", "this month", "last week", or "2026-08-01 to 2026-08-18".
Inputs: period. Returns: result
get_stressA
Stress levels for one day: average and highest, plus how the day split between rest, low, medium and high stress.
Args: day: For example "today", "yesterday" or "2026-08-18".
Inputs: day. Returns: result
get_training_readinessA
Garmin's training readiness score: how prepared the body is to train hard today, and which factors are helping or hurting.
Args: day: For example "today", "yesterday" or "2026-08-18".
Inputs: day. Returns: result
get_vo2max_and_fitnessC
VO2 max (aerobic fitness), fitness age and training status.
Args: day: For example "today" or "2026-08-18".
Inputs: day. Returns: result
get_weight_historyA
Recorded body weight over a period, with the change from first to last.
Args: period: For example "last 30 days", "this month" or "2026-01-01 to 2026-08-18".
Inputs: period. Returns: result
get_workoutA
Show the steps of one saved workout plan.
Args: workout_id: The numeric id, from list_workouts.
Inputs: workout_id (required). Returns: result
list_activitiesA
List recorded activities (runs, rides, swims, walks and so on) in a period. Use this to find an activity before asking for its details.
Args: period: For example "last 30 days", "this month" or "2026-08-01 to 2026-08-18". sport: Optional filter, one of running, cycling, swimming, walking, hiking, strength_training, fitness_equipment, multi_sport, other. Leave empty for all sports. limit: Most activities to list. Defaults to 20.
Inputs: limit, sport, period. Returns: result
list_workoutsC
List the saved workout plans in Garmin Connect.
Args: limit: Most workouts to list. Defaults to 25.
Inputs: limit. Returns: result
log_hydrationA
Add drunk water to the hydration log in Garmin Connect.
Args: milliliters: How much water to add, in millilitres. 250 is a glass. day: Which day to add it to. Defaults to today.
Inputs: milliliters (required), day. Returns: result
log_weightC
Record a body weight measurement in Garmin Connect.
Args: kilograms: The weight in kilograms, for example 74.5. day: When it was measured. Defaults to today.
Inputs: kilograms (required), day. Returns: result
schedule_workoutA
Put an existing workout plan on the Garmin training calendar.
Args: workout_id: The numeric id, from list_workouts or create_workout. day: The date to schedule it on, for example "tomorrow" or "2026-08-20".
Inputs: day (required), workout_id (required). Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 25 tools
Each tool targets a distinct health metric or activity aspect. The daily summary and individual metric tools are clearly separated by description, and activity tools (list, details, splits, last, on day) have distinct purposes. No two tools overlap in functionality.
All tool names follow a consistent verb_noun pattern using snake_case. Read operations use 'get_', 'list_', or 'show_', and write operations use 'log_', 'create_', or 'schedule_'. The pattern is predictable and easy to understand.
25 tools is on the higher end, but each covers a distinct aspect of Garmin Connect's health and fitness data. The count is justified by the breadth of metrics (daily summary, sleep, steps, HR, HRV, stress, body battery, etc.) and activity/workout management. A slight reduction could be possible if some convenience tools were merged, but they each earn their place.
The tool set covers the main user needs: viewing daily health metrics, activity history, workout planning, and logging weight and hydration. Missing are update/delete operations for activities or workouts, but these may be limited by the Garmin API. Overall, the surface is well-rounded and leaves few obvious gaps for typical queries.
Maintenance
Related MCP Connectors
Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.
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.
Log meals, water, and weight to Garmin Connect from Claude or ChatGPT.
Garmin data in Claude: 135 tools — activities, sleep, HRV, training, workouts. Free, open source.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceThis Model Context Protocol (MCP) server connects to Garmin Connect and exposes your fitness and health data to Claude and other MCP-compatible clients.1MIT
- 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
- AlicenseAqualityDmaintenanceA 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
- AlicenseNot gradedqualityDmaintenanceThis MCP server exposes Garmin Connect health data—sleep, heart rate, HRV, stress, VO2max, and activities—to Claude through local tools, enabling natural language queries, data syncing, and statistical analysis like correlations and night-out detection.MIT