garmin-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GARMIN_EMAIL | Yes | Your Garmin Connect login email | |
| GARMIN_PASSWORD | Yes | Your Garmin Connect login password | |
| MCP_AUTH_PASSWORD | Yes | Password used for OAuth authorization to access the MCP server |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_sleepA | Sleep duration, sleep stages, sleep score, and overnight HRV. Args: date: Calendar date in YYYY-MM-DD format. Defaults to last night (yesterday). Pass today's date to get the most recent recorded sleep when you wake up. |
| get_recent_activitiesA | List recent activities with type, duration, distance, and average heart rate. Args: limit: How many of the most recent activities to return. Capped at 50. |
| get_activity_detailsA | Detailed metrics for one activity, including splits and HR zones. Args:
activity_id: The activity's numeric Garmin ID, as returned by
|
| get_training_loadB | Daily training load with acute and chronic load and current status. Args: days: Number of recent days to summarise. Capped at 28. |
| get_hrv_statusA | Current HRV status, baseline range, and the last 7 nights of readings. |
| get_body_batteryA | Body battery values across the day, plus min, max, charged, and drained totals. Args: date: Calendar date in YYYY-MM-DD format. Defaults to today. |
| get_steps_and_caloriesA | Daily step total, distance, calories, floors, and intensity minutes. Args: date: Calendar date in YYYY-MM-DD format. Defaults to today. |
| get_resting_heart_rateA | Resting heart rate trend over the last Args: days: How many recent days to include. Capped at 28. |
| get_stressB | Stress levels across the day with average, max, and time-in-zone breakdown. Args: date: Calendar date in YYYY-MM-DD format. Defaults to today. |
| get_training_readinessA | Daily training readiness score (0-100) with contributing factors. The score reflects how prepared the user is to train, drawing on sleep, HRV status, recovery time, and recent training load. Args: date: Calendar date in YYYY-MM-DD format. Defaults to today. |
| get_daily_briefingA | One-call morning snapshot: sleep, HRV, Body Battery, readiness, load, and RHR. Fuses the individual recovery and training-load tools into a single payload so
you can reason across them in one shot instead of making six separate calls.
Each section is fetched independently and concurrently; a section that fails
comes back The server returns facts only and computes no training advice — interpret the numbers yourself (e.g. weigh readiness, HRV status, and Body Battery together). Args: date: Calendar date in YYYY-MM-DD format. Defaults to today. The sleep, Body Battery, and training-readiness sections honour this date; the HRV, training-load, and resting-HR sections always report their own most-recent trailing window. For the default (this-morning) call everything lines up; passing a past date yields a mixed snapshot. |
| get_fitness_metricsA | VO2 max (running and cycling), fitness age, and predicted race times. Combines Garmin's "max metrics" tile (VO2 max, fitness age) with current race-time predictions for 5K, 10K, half marathon, and marathon. Args: date: Calendar date for the VO2 max snapshot in YYYY-MM-DD format. Defaults to today. |
| get_personal_recordsA | Personal records across activity types (fastest 1K/5K/10K, longest run, etc.). |
| get_body_compositionA | Weight, body fat, and muscle-mass trend over recent days. Returns one row per day Garmin has a reading for, plus the latest weight and average over the window. Args: end_date: End of the window in YYYY-MM-DD format. Defaults to today. days: Window size in days. Capped at 90. |
| get_respirationA | Daily respiration rate: average, min, max, and waking vs. sleeping averages. Args: date: Calendar date in YYYY-MM-DD format. Defaults to today. |
| get_weekly_summaryA | Weekly aggregates for a single metric. Args: metric: One of "steps", "stress", or "intensity_minutes". weeks: How many recent weeks to include. Capped at 12. end_date: End of the window in YYYY-MM-DD format. Defaults to today. |
| get_strength_setsA | Set-by-set breakdown of a logged strength session: exercises, reps, and weight. Parses Garmin's recorded sets for one Args:
activity_id: The activity's numeric Garmin ID, from |
| get_endurance_scoreA | Garmin endurance score with its activity-type contributors. The endurance score reflects accumulated aerobic capacity across activities. It only updates after qualifying activities, so a given day may have no value. Args: date: Calendar date in YYYY-MM-DD format. Defaults to today. |
| get_hill_scoreA | Garmin hill score (climbing strength + endurance) for a date. Combines a strength and an endurance component into an overall hill score.
Requires qualifying climbing efforts, so it is often empty for flat-terrain
athletes — an empty result is reported via Args: date: Calendar date in YYYY-MM-DD format. Defaults to today. |
| get_activity_weatherA | Weather conditions recorded during an activity (temp, humidity, wind). Units follow your Garmin account's measurement system (US accounts report degrees Fahrenheit and mph). Args:
activity_id: The activity's numeric Garmin ID, from |
| preview_strength_workoutA | Assemble a strength workout and show what WOULD be created — no network call. Resolves each exercise name to Garmin's catalog and returns a readable
summary, the resolved Garmin name + confidence per exercise, warnings for
anything that did not map cleanly, and a Args: workout: the workout definition (name, blocks of sets/exercises). |
| create_strength_workoutA | Create a strength workout in your Garmin Connect library (a WRITE). Requires writes to be enabled (GARMIN_WRITE_ENABLED) and a matching
Args:
workout: the workout definition (same shape as preview).
confirmation_token: token returned by |
| list_workoutsA | List workouts saved in your Garmin Connect library (id, name, sport). These are workout templates in the library — the source the watch syncs
from — not logged activities. Use the ids with Args: limit: maximum number of workouts to return (default 50). |
| delete_workoutA | Delete ONE workout from your Garmin Connect library (a WRITE, irreversible). Preview-then-confirm: call without a token first — that call deletes
nothing and returns the workout's name plus a Args:
workout_id: id from |
| preview_running_workoutA | Assemble a running workout and show what WOULD be created — no network call. Validates the structure (one end condition per step, paired pace bounds,
pace format) and returns a readable summary, sanity warnings, and a
Args: workout: the workout definition (name, steps and/or repeat groups). |
| create_running_workoutA | Create a structured running workout in your Garmin Connect library (a WRITE). Supports warmup/cooldown/interval/recovery steps, repeat groups for
intervals, and optional pace targets ('M:SS' per km). Requires writes to be
enabled (GARMIN_WRITE_ENABLED) and a matching Args:
workout: the workout definition (same shape as preview).
confirmation_token: token returned by |
| schedule_workoutA | Put an existing library workout on a Garmin Connect calendar date (a WRITE). Works for any workout type (running, strength, ...). A scheduled workout is
pushed to the watch automatically on its next sync — no "Send to Device"
needed. Reversible with Args: workout_id: id from create_running_workout / create_strength_workout / list of workouts in Garmin Connect. date: calendar date, YYYY-MM-DD. |
| unschedule_workoutA | Remove a scheduled workout from the calendar (a WRITE; keeps the template). The workout stays in your library — only the calendar entry is removed. Args:
schedule_id: id returned by |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
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/Tyler-Irving/garmin-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server