Skip to main content
Glama
k-schmidt

Garmin Workout Pipeline

by k-schmidt

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
GARMIN_EMAILYesYour Garmin Connect email address.
GARMIN_PASSWORDYesYour Garmin Connect password.

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
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

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

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