garmin-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
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 |
|---|---|
| list_activitiesA | List recent Garmin activities, most recent first. Args: limit: Maximum number of activities to return. start: Number of most-recent activities to skip (for pagination). activity_type: Optional Garmin activity type filter, e.g. "running", "cycling", "swimming". Leave unset to include all types. |
| get_activityA | Get full detail for a single activity: summary plus per-metric time series (pace/HR/power/elevation, GPS-derived stats, etc.). Args: activity_id: The Garmin activity ID, as returned by list_activities. |
| get_activity_splitsA | Get lap/split data for a single activity. Args: activity_id: The Garmin activity ID, as returned by list_activities. |
| get_heart_rateA | Get a day's heart rate data: resting HR and an intraday HR timeline. Args: date_str: Date as YYYY-MM-DD. Defaults to today. |
| get_daily_statsA | Get a day's overall stats summary: steps, calories, resting HR, distance, floors climbed, intensity minutes, etc. Args: date_str: Date as YYYY-MM-DD. Defaults to today. |
| get_sleepA | Get sleep data for the night ending on the given date: sleep stages, duration, sleep score, and related metrics. Args: date_str: Date as YYYY-MM-DD. Defaults to today. |
| get_hrvB | Get heart rate variability (HRV) data for the given date. Args: date_str: Date as YYYY-MM-DD. Defaults to today. |
| get_body_batteryB | Get Body Battery (energy reserve) data over a date range. Args: start_date: Start date as YYYY-MM-DD. Defaults to today. end_date: End date as YYYY-MM-DD. Defaults to start_date. |
| get_stressA | Get all-day stress level data for the given date. Args: date_str: Date as YYYY-MM-DD. Defaults to today. |
| get_training_readinessA | Get Garmin's Training Readiness score and contributing factors for the given date. Args: date_str: Date as YYYY-MM-DD. Defaults to today. |
| get_profileA | Get the athlete's profile: identity/unit preferences, personal settings (including max HR, resting HR, weight, height, VO2max), configured heart rate zones per sport, and configured power zones per sport. |
| get_lactate_thresholdA | Get running lactate threshold data (heart rate, power, and speed). Args: latest: If True, return the latest lactate threshold info. If False, query a range instead (requires start_date). start_date: Start date as YYYY-MM-DD. Required if latest is False; ignored if latest is True. end_date: End date as YYYY-MM-DD. Defaults to today. Ignored if latest is True. aggregation: One of "daily", "weekly", "monthly", "yearly". |
| get_cycling_ftpA | Get the athlete's latest cycling Functional Threshold Power (FTP). |
| get_ftp_historyA | Get historic Functional Threshold Power for a sport over a date range. Args: start_date: First date in the range, as YYYY-MM-DD. end_date: Last date in the range, as YYYY-MM-DD. sport: Garmin sport key, e.g. "RUNNING", "CYCLING". aggregation: One of "daily", "weekly", "monthly", "yearly". |
| get_max_metricsA | Get max-metric data (e.g. VO2max) over a date range. Args: start_date: Start date as YYYY-MM-DD. Defaults to today. end_date: End date as YYYY-MM-DD. Defaults to start_date. |
| get_resting_heart_rateA | Get the daily resting heart rate trend over a date range. Args: start_date: Start date as YYYY-MM-DD. Defaults to today. end_date: End date as YYYY-MM-DD. Defaults to start_date. |
| get_fitness_ageA | Get the athlete's Garmin Fitness Age for the given date. Args: date_str: Date as YYYY-MM-DD. Defaults to today. |
| get_personal_recordsC | Get the athlete's personal records. |
| list_workoutsA | List the athlete's saved workouts (templates), most recent first. Args: limit: Maximum number of workouts to return. start: Number of most-recent workouts to skip (for pagination). |
| get_workoutA | Get the full structure of one workout: segments, targets, intervals. Args: workout_id: The workout ID, as returned by list_workouts or get_scheduled_workout. |
| get_scheduled_workoutsA | Get the calendar of workouts scheduled for a given month. This is the primary way to find out what's coming up next in training. Args: year: Four-digit year, e.g. 2026. month: Month number, 1-12. |
| get_scheduled_workoutA | Get detail for one scheduled workout instance. Args: scheduled_workout_id: The scheduled-workout ID, as returned by get_scheduled_workouts. |
| list_training_plansB | List training plans. |
| get_training_planB | Get details for a specific training plan. Args: plan_id: The training plan ID, as returned by list_training_plans. |
| get_adaptive_training_planB | Get details for a specific adaptive training plan. Args: plan_id: The adaptive training plan ID, as returned by list_training_plans. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 25 tools
Each tool targets a distinct Garmin data resource (activities, sleep, HRV, workouts, plans). A few metrics overlap—get_heart_rate vs get_resting_heart_rate and daily stats including resting HR—but descriptions clarify the unit (intraday day vs range trend). No two tools are truly interchangeable.
All tools follow a consistent get_/list_ + noun pattern, with clear singular/plural distinctions like get_scheduled_workout vs get_scheduled_workouts. The few compound names (get_cycling_ftp, get_lactate_threshold) are readable and fit the pattern.
25 tools is at the heavy end of the range; each represents a specific endpoint but the set could be streamlined (e.g., range-based metrics could share a generic pattern). Still, the count is justified by Garmin's many distinct data categories and remains navigable.
The read-side surface is broad: activities, daily wellness, training metrics, workouts, scheduled workouts, and training plans are all covered. Missing write/management operations (activity uploads, workout creation, plan enrollment) and some niche metrics keep it from a 5.