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_sleepA | Sleep for the night ending on the given date: stages, score and overnight vitals. |
| garmin_heart_rateA | 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_batteryB | Body Battery charge and drain per day over a date range (default: last 7 days). |
| garmin_stepsA | Daily step totals over a range, or 15-minute buckets for one day via intraday_date. |
| garmin_spo2A | 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_vo2maxA | 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_dateB | Activities within a date range (default: last 7 days), oldest first. |
| garmin_last_activityD | The most recently recorded activity. |
| garmin_activityA | One activity in detail. raw=true returns the full payload including chart samples. |
| garmin_activity_splitsC | Per-lap splits for an activity. |
| garmin_activity_weatherC | Weather recorded during an activity. |
| garmin_weightA | 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_activitiesA | 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_workoutB | Put an existing workout on the calendar for a given date. |
| garmin_list_workoutsA | 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_workoutA | Remove a scheduled workout from the calendar. The workout itself is kept. |
| garmin_delete_workoutA | 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
Each tool targets a distinct Garmin data source or action, and the metric tools are clearly separated by health domain. The main ambiguity risk is between rollups like garmin_briefing and garmin_daily_summary, and between activity list variants, but the descriptions are specific enough to resolve those.
The garmin_ prefix and snake_case style are consistent throughout. Reader tools use noun-ish names like garmin_hrv and garmin_steps while action tools use verb_noun names like create_workout and delete_workout; a few outliers like garmin_api_get and garmin_whoami break the pattern but are still predictable.
35 tools is well over the 25+ threshold and feels heavy for an agent to navigate, even though the domain is broad. Many health metrics and workout operations are legitimately distinct, but the surface would benefit from consolidation, such as grouping daily wellness metrics into fewer tools.
The set covers the core Garmin wellness and activity domains thoroughly: health metrics, activity history/detail, personal records, training status, and workout lifecycle management. Minor gaps exist, like no update_workout or activity deletion, but garmin_api_get provides a read-only escape hatch and the main workflows have no dead ends.