garmin-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GARMIN_EMAIL | No | Garmin account email address, used for unattended re-authentication when the cached session expires. | |
| GARMIN_PASSWORD | No | Garmin account password, used for unattended re-authentication when the cached session expires. Can be omitted in favor of running scripts/login.sh manually. |
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_daily_summaryA | Daily health summary: steps, calories, resting heart rate and body battery. Args: date: Day to report on. YYYY-MM-DD, 'today', 'yesterday' or an offset like '-3'. Defaults to today. |
| get_sleep_dataA | Sleep stages and sleep score for a night. Args: date: The date you woke up on. YYYY-MM-DD, 'today', 'yesterday' or an offset like '-3'. Defaults to today. |
| get_activitiesA | List recent runs and workouts with distance, duration, pace and HR zones. Args: limit: Maximum activities to return (1-50). Defaults to 10. start_date: Optional first day of a date range, YYYY-MM-DD. end_date: Optional last day of a date range. Defaults to today when start_date is given. |
| get_activity_detailsA | Splits and heart-rate detail for one activity. Args: activity_id: The activityId from get_activities. |
| list_workoutsA | List structured workouts saved in the Garmin account. Args: limit: Maximum workouts to return (1-100). Defaults to 20. |
| create_workoutA | Create a structured workout in Garmin Connect. Adds a new workout; it never edits or replaces an existing one. Use schedule_workout afterwards to put it on a date so it syncs to the watch. Args: name: Name shown in Garmin Connect and on the watch. steps: Ordered list of steps. Each step is an object: - "type": warmup, interval, recovery, rest, cooldown, or repeat - exactly one of "duration_seconds" or "distance_meters" - optional target, either "pace" ("4:05", or ["4:00","4:10"] for a range, minutes per km) or "hr" ([150, 165] in bpm) A repeat looks like {"type": "repeat", "times": 5, "steps": [...]} and cannot contain another repeat. Example — 15 min warmup, 5x1km at 4:05 with 90s recoveries, 10 min cooldown: [{"type": "warmup", "duration_seconds": 900}, {"type": "repeat", "times": 5, "steps": [ {"type": "interval", "distance_meters": 1000, "pace": "4:05"}, {"type": "recovery", "duration_seconds": 90}]}, {"type": "cooldown", "duration_seconds": 600}] sport: running, cycling, swimming, walking or hiking. Defaults to running. description: Optional note stored with the workout. |
| schedule_workoutA | Put an existing workout on a date in the Garmin calendar. Scheduling is what makes a workout sync to the watch. Args: workout_id: Id from create_workout or list_workouts. date: The day to schedule it on. YYYY-MM-DD, 'today', 'tomorrow', or an offset like '+3'. |
| get_connection_statusA | Check whether the server is logged in to Garmin Connect. Reports which credentials are present and whether the cached session is usable. Never returns the password or the cached token itself. |
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 8 tools
Each tool targets a distinct resource: daily health, sleep, performed activities, activity details, saved workouts, workout creation, scheduling, and connection status. The only related pairs (activities vs workouts, create vs schedule) are clearly differentiated by descriptions and workflow order.
All names follow a readable snake_case verb_noun pattern and mostly align with intent. The only minor inconsistency is that get_activities returns a collection while list_workouts uses list_ for the same kind of operation.
Eight tools is well-scoped for a Garmin health/fitness server: read coverage for daily stats, sleep, and activities, plus workout creation and scheduling. There are no redundant tools, and the count is appropriate without overwhelming an agent.
The read side is solid, but workout management has notable gaps: create, list, and schedule exist, but there is no update, delete, or unschedule for workouts. An agent cannot correct or remove a mistaken workout or scheduled date, which are common expected operations.