Zone Two
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GARMINTOKENS | No | Override the directory where Garmin OAuth tokens are stored. Default is ~/.garminconnect. | |
| GARMIN_MCP_ENABLE_WRITES | No | Set to '1' to enable write operations (rename activity, log weight/hydration). Default is '0'. |
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 |
|---|---|
| garmin_whoamiA | Identify the signed-in Garmin account and its unit preferences. |
| garmin_devicesA | List the Garmin devices registered to the account, newest sync first. |
| garmin_daily_summaryB | Whole-day wellness rollup: steps, calories, distance, floors, stress, body battery. |
| garmin_sleepB | Sleep for the night ending on the given date: stages, score and overnight vitals. |
| garmin_heart_rateB | Heart rate for a day. Summary gives min/max/resting; raw adds the 2-minute series. |
| garmin_hrvB | Overnight heart rate variability: last-night average, baseline and status. |
| garmin_stressB | All-day stress: average, max and time spent in each stress band. |
| garmin_body_batteryA | Body Battery charge and drain per day over a date range (default: last 7 days). |
| garmin_stepsC | Daily step totals over a range, or 15-minute buckets for one day via intraday_date. |
| garmin_spo2B | Pulse oximetry for a day: average and lowest overnight SpO2. |
| garmin_respirationB | Breathing rate for a day: waking, sleeping, highest and lowest breaths per minute. |
| garmin_intensity_minutesB | Moderate and vigorous intensity minutes for a day, against the weekly goal. |
| garmin_training_readinessC | Training readiness score for a day, with the factors that drove it. |
| garmin_training_statusB | Training status, acute/chronic load balance and VO2 max as of a date. |
| garmin_vo2maxB | VO2 max, fitness age and heat/altitude acclimation as of a date. |
| garmin_race_predictionsA | Predicted race times for 5K, 10K, half and full marathon. |
| garmin_personal_recordsB | Personal records across activity types. |
| garmin_activitiesB | Most recent activities, newest first. activity_type filters e.g. running, cycling. |
| garmin_activities_by_dateA | Activities within a date range (default: last 7 days), oldest first. |
| garmin_last_activityA | The most recently recorded activity. |
| garmin_activityC | One activity in detail. raw=true returns the full payload including chart samples. |
| garmin_activity_splitsB | Per-lap splits for an activity. |
| garmin_activity_weatherC | Weather recorded during an activity. |
| garmin_weightB | Weigh-ins over a date range (default: last 7 days), with body composition where recorded. |
| garmin_briefingA | Morning snapshot in one call: sleep, HRV, Body Battery, readiness, stress and RHR. |
| garmin_api_getA | Call any Garmin Connect API path directly (read-only GET). For endpoints the dedicated tools do not cover. Paths look like '/usersummary-service/usersummary/daily/{displayName}?calendarDate=2026-09-19'. Prefer a dedicated tool when one exists — this returns unshaped payloads. |
| garmin_training_historyA | Weekly training volume over recent weeks — the input for writing a plan. Returns one row per week (distance, sessions, longest run, average pace) plus overall totals, in a single call. Use this before designing a plan rather than fetching activities one range at a time. |
| garmin_export_activitiesB | Export activities in a date range as CSV — the export Garmin makes awkward. One header row then one row per activity, newest last. Narrow the range if the response comes back truncated. |
| garmin_create_workoutA | Create a structured running workout on Garmin, optionally scheduling it. |
| garmin_schedule_workoutA | Put an existing workout on the calendar for a given date. |
| garmin_list_workoutsB | List the workouts saved on the Garmin account, newest first. |
| garmin_scheduled_workoutsB | List workouts scheduled in a given month (defaults to the current one). |
| garmin_unschedule_workoutB | Remove a scheduled workout from the calendar. The workout itself is kept. |
| garmin_delete_workoutB | Delete a saved workout. Only affects plans — recorded activities cannot be deleted. |
| garmin_submit_mfa_codeA | Finish signing in to Garmin with the one-time code it emailed. Only needed when a Garmin tool has just reported that a code was sent. The code is valid for 30 minutes; afterwards the saved tokens last about a year and this is not asked for again. |
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 35 tools
Most tools target a distinct metric or resource, and descriptions generally make boundaries clear. A few adjacent tools could be confused, such as garmin_last_activity versus garmin_activities, or garmin_create_workout with optional scheduling versus garmin_schedule_workout.
All tools share the garmin_ prefix and use snake_case, which provides strong consistency. However, patterns vary between noun-style names like garmin_sleep and garmin_steps, verb_noun names like garmin_create_workout, and adjectival forms like garmin_scheduled_workouts.
Thirty-five tools is a very large surface for one MCP server, even for a broad health/activity domain. Several metric-specific tools could plausibly be consolidated or grouped, and the count exceeds the range where agents can efficiently discover and select the right tool.
The server covers the main Garmin domains well: wellness metrics, activity retrieval and detail, workout creation and scheduling, and account auth. Minor gaps exist, such as no workout update operation and no nutrition/hydration coverage, but garmin_api_get provides a general escape hatch.