garmin-coach-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GARMINTOKENS | No | Where the Garmin OAuth token lives. | ~/.garminconnect |
| GARMIN_COACH_HOST | No | HTTP bind address. | 0.0.0.0 |
| GARMIN_COACH_PORT | No | HTTP port. | 8080 |
| GARMIN_COACH_SECRET | No | Required for HTTP transport. Minimum 32 characters. | |
| GARMIN_COACH_READONLY | No | Set to '1' to hide write tools. | off |
| GARMIN_COACH_CLIENT_ID | No | Entra app ID; required audience on tokens. | |
| GARMIN_COACH_TENANT_ID | No | Entra tenant issuing tokens. | |
| GARMIN_COACH_TRANSPORT | No | Transport mode: stdio (default) or http. | stdio |
| GARMIN_COACH_PUBLIC_URL | No | This server's public URL, for RFC 9728 metadata. | |
| GARMIN_COACH_ALLOWED_OIDS | No | Object IDs permitted to call the server. | |
| GARMIN_COACH_ALLOWED_HOSTS | No | Host headers the MCP SDK will accept. | localhost only |
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_statusA | Check that the Garmin connection works and show whose account is connected. Use this first to confirm authentication before other tools. |
| list_activitiesA | List your most recent Garmin activities. Args: limit: How many recent activities to return (default 10). activity_type: Optional Garmin type key filter, e.g. "running", "strength_training", "cycling". Omit for all types. |
| get_activityA | Get detailed metrics for a single activity by its ID. Args: activity_id: The activityId from list_activities. |
| get_exercise_setsA | Get the per-set strength breakdown (exercise, reps, weight, est. 1RM) for one activity. Only meaningful for strength_training activities logged with sets on the watch. Args: activity_id: The activityId of a strength workout. |
| get_strength_historyA | Progressive-overload view: strength sets grouped by session over recent weeks. Walks your recent strength_training activities, pulls their sets, and returns per-session weight x reps so you can see whether a lift is going up. Args: exercise_name: Optional case-insensitive substring to filter to one lift (e.g. "bench", "squat"). Omit to include all exercises. weeks: How many weeks back to look (default 8). max_sessions: Cap on how many strength sessions to fetch (default 20). |
| get_recoveryA | Get sleep, daily stats, and training readiness for one day (default today). Args: date: YYYY-MM-DD. Defaults to today. |
| get_trendsA | Time series of a daily health metric to answer 'how am I trending?'. Args: metric: One of resting_hr, steps, calories, stress, body_battery_high, body_battery_low, floors_climbed. weeks: How many weeks back to sample (default 8, max 26). sample_days: Sampling interval in days (default 7 = weekly). The series is capped at 60 points; a finer interval over a long window is widened automatically rather than making hundreds of requests. |
| suggest_next_weightA | Recommend the next weight & reps for a lift using progressive overload. Reads your recent strength history for the exercise and applies a double-progression rule. This is read-only (it does not change anything on Garmin). Args: exercise_name: Case-insensitive substring of the lift, e.g. "bench", "squat". reps_low: Bottom of your target rep range (default 8). reps_high: Top of your target rep range (default 12). increment_kg: Weight jump when you graduate the range (default 2.5). weeks: How many weeks of history to consider (default 8). |
| list_workoutsA | List saved Garmin workouts (name + id), newest first. Args: limit: How many workouts to return (default 20). |
| create_strength_workoutA | Create a strength workout in Garmin Connect (and optionally schedule it). EXPERIMENTAL: built from Garmin's unofficial workout schema. After creating, open the Garmin Connect app to confirm it looks right; use delete_workout to undo. Args: name: Workout name shown on the watch / in Garmin Connect. exercises: List of exercises. Each item: {"name": "Bench Press", "sets": 3, "reps": 10, "weight_kg": 60, "rest_seconds": 90, "category": "BENCH_PRESS" (optional Garmin key)} schedule_date: Optional YYYY-MM-DD to place it on your Garmin calendar. |
| schedule_workoutA | Schedule an existing Garmin workout onto your calendar. Args: workout_id: The workout's ID (from create_strength_workout or list_workouts). date: Target date, YYYY-MM-DD. |
| delete_workoutA | Delete a saved Garmin workout (undo a created workout). Args: workout_id: The workout's ID from list_workouts / create_strength_workout. |
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 12 tools
Each tool targets a distinct concern: status, activity retrieval, strength analysis, recovery trends, and workout management. Even the strength-related tools are clearly separated by scope (single activity vs. history vs. recommendation), so an agent can reliably select the right one.
Most tools follow a verb_noun pattern (list_activities, get_activity, create_strength_workout, schedule_workout, delete_workout, suggest_next_weight), but garmin_status deviates from this pattern, making the naming slightly inconsistent overall.
With 12 tools, the server is well-scoped for its purpose: it covers activity data, health metrics, strength analysis, and workout management without unnecessary redundancy or bloat.
The server covers the main coach workflows: reading activities, analyzing strength progression, suggesting next weights, and managing workouts. Minor gaps such as listing scheduled workouts or updating an existing workout are easy to work around and do not cripple the overall tool surface.