Garmin Workout Pipeline
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GARMIN_EMAIL | Yes | Your Garmin Connect email address. | |
| GARMIN_PASSWORD | Yes | Your Garmin Connect password. |
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 |
|---|---|
| create_workoutA | Create a new workout. Args: name: Workout name (e.g. "Hyrox Race Sim") type: Sport type — one of: running, cycling, strength, swimming, walking, hiking |
| set_workout_nameC | Rename the current workout. Args: name: New workout name |
| get_workoutB | Get the current workout summary. |
| clear_workoutA | Clear the current workout and start fresh. |
| add_warmupB | Add a warmup step. Args: duration: Duration as "M:SS" or "lap" for lap button. Default: lap. zone: Training zone name (e.g. "easy", "z2"). exercise: Exercise name for strength warmups (e.g. "rowing_machine"). notes: Notes to display on the watch. |
| add_cooldownA | Add a cooldown step. Args: duration: Duration as "M:SS" or "lap" for lap button. Default: lap. zone: Training zone name (e.g. "easy", "z1"). exercise: Exercise name for strength cooldowns (e.g. "rowing_machine"). notes: Notes to display on the watch. |
| add_runA | Add a running interval step. End condition: set exactly one of duration, distance, or neither (lap button). Target: set zone OR pace range OR HR range OR none. Args: duration: Duration as "M:SS" or "lap" for lap button. distance: Distance like "1km", "400m", "1mi". zone: Training zone name (e.g. "threshold", "tempo", "z4"). pace_min: Faster pace bound (e.g. "6:25/mi"). Must pair with pace_max. pace_max: Slower pace bound (e.g. "6:40/mi"). Must pair with pace_min. hr_min: Lower HR bound in bpm. Must pair with hr_max. hr_max: Upper HR bound in bpm. Must pair with hr_min. notes: Notes to display on the watch. |
| add_bikeA | Add a cycling interval step. End condition: set exactly one of duration, distance, or neither (lap button). Target: set zone OR power range OR power_pct range OR none. Args: duration: Duration as "M:SS" or "lap" for lap button. distance: Distance like "10km", "20mi". zone: Training zone name (e.g. "threshold", "z3"). power_min: Lower power in watts. Must pair with power_max. power_max: Upper power in watts. Must pair with power_min. power_pct_min: Lower power as %FTP. Must pair with power_pct_max. power_pct_max: Upper power as %FTP. Must pair with power_pct_min. |
| add_exerciseA | Add a strength/cardio exercise step. End condition: set reps OR duration OR neither (lap button). Args: exercise: Exercise name (e.g. "wall_ball", "kettlebell_swing", "burpee"). Use list_exercises to see all available exercises. duration: Duration as "M:SS" or "lap" for lap button. reps: Number of repetitions. weight: Weight in lbs. notes: Notes to display on the watch (e.g. distance for carries). |
| add_restB | Add a rest step. Args: duration: Rest duration as "M:SS" (e.g. "2:00" for 2 minutes). |
| add_recoveryA | Add a recovery step between intervals. Args: duration: Duration as "M:SS" or "lap" for lap button. Default: lap. distance: Distance like "200m" for recovery jogs. zone: Training zone name (e.g. "z1", "easy"). |
| add_circuitA | Open a new circuit/repeat group. Steps added after this go inside the circuit. Call end_circuit when done adding steps to close it. Args: iterations: Number of times to repeat the circuit. skip_last_rest: If true, skip the last rest step in the circuit. |
| end_circuitA | Close the current circuit. Subsequent steps will be added at the parent level. |
| remove_stepA | Remove a step by its 1-based index from the top-level step list. Args: index: 1-based step index (as shown in get_workout output). |
| preview_uploadA | Preview the workout that would be uploaded to Garmin Connect. Always call this before upload_workout so the user can review and confirm. |
| upload_workoutA | Upload the current workout to Garmin Connect. IMPORTANT: Always call preview_upload first and get explicit user confirmation before calling this tool. Replaces any existing workout with the same name. Args: confirm: Must be true. Confirms the user has approved the upload. schedule_date: Optional date to schedule the workout (YYYY-MM-DD). |
| list_workoutsB | List all workouts on Garmin Connect. |
| delete_workoutA | Delete a workout from Garmin Connect. Args: workout_id: Garmin workout ID (from list_workouts). |
| list_exercisesB | List available exercises for strength/cardio workouts. Args: filter: Optional filter string to search by name or category. |
| get_zonesA | Show available training zones from zones.yaml. Args: sport_type: Filter by sport — "running" or "cycling". Shows all if omitted. |
| validate_workoutB | Compile the current workout and return the Garmin API JSON for inspection. |
| save_yamlA | Save the current workout as a YAML template file. Args: path: File path to save to. Defaults to workouts/templates/.yaml. |
| load_templateA | Load a workout from a YAML template file. Args: path: Path to the YAML file (e.g. "workouts/templates/hyrox-sim.yaml"). |
| list_templatesA | List available YAML workout templates in workouts/templates/. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/k-schmidt/Garmin-Workout-Pipeline'
If you have feedback or need assistance with the MCP directory API, please join our Discord server