create-workout
Upload structured workout data to Garmin Connect. Create custom workouts using JSON with support for steps, intervals, and target zones.
Instructions
Upload a workout from JSON data.
Creates a new workout in Garmin Connect from structured workout data.
IMPORTANT: Step types must use Garmin's DTO format:
Use "ExecutableStepDTO" for regular steps (warmup, interval, cooldown, recovery)
Use "RepeatGroupDTO" for repeat/interval groups with numberOfIterations
IMPORTANT: For heart rate zone targets, use "zoneNumber" (1-5), NOT targetValueOne/targetValueTwo. targetValueOne/targetValueTwo are only for absolute value ranges (e.g. pace in m/s, power in watts).
Sport type IDs: 1=running, 2=cycling, 3=swimming, 4=walking, 5=strength_training, 6=fitness_equipment, 7=hiking. Step type IDs: warmup (1), cooldown (2), interval (3), recovery (4), rest (5). End condition IDs: time (2, value in seconds), distance (3, value in meters), lap.button (7, no value), reps (10, value = rep count — use for strength exercises). Target type IDs: no.target (1), speed (2, m/s range via targetValueOne/targetValueTwo), heart.rate.zone (4, use zoneNumber 1-5), power.zone (11, use zoneNumber).
Available Templates: Instead of building workout JSON from scratch, use these MCP resources as starting points:
workout://templates/simple-run - Basic warmup/run/cooldown structure
workout://templates/interval-running - Interval training with repeat groups
workout://templates/tempo-run - Tempo run with heart rate zone targets
workout://templates/strength-circuit - Strength training circuit structure
workout://reference/structure - Complete JSON structure reference with all fields
Access these resources using your MCP client's resource reading capability, modify the template as needed, and pass the resulting JSON as the workout parameter.
Example workout structure with HR zone target: { "workoutName": "My Workout", "sportType": {"sportTypeId": 1, "sportTypeKey": "running"}, "workoutSegments": [{ "segmentOrder": 1, "sportType": {"sportTypeId": 1, "sportTypeKey": "running"}, "workoutSteps": [{ "type": "ExecutableStepDTO", "stepOrder": 1, "stepType": {"stepTypeId": 3, "stepTypeKey": "interval"}, "endCondition": {"conditionTypeId": 2, "conditionTypeKey": "time"}, "endConditionValue": 1200.0, "targetType": {"workoutTargetTypeId": 4, "workoutTargetTypeKey": "heart.rate.zone"}, "zoneNumber": 3 }] }] }
Example with RepeatGroupDTO for intervals: { "workoutName": "Interval Run", "sportType": {"sportTypeId": 1, "sportTypeKey": "running"}, "workoutSegments": [{ "segmentOrder": 1, "sportType": {"sportTypeId": 1, "sportTypeKey": "running"}, "workoutSteps": [ { "type": "ExecutableStepDTO", "stepOrder": 1, "stepType": {"stepTypeId": 1, "stepTypeKey": "warmup"}, "endCondition": {"conditionTypeId": 2, "conditionTypeKey": "time"}, "endConditionValue": 600.0, "targetType": {"workoutTargetTypeId": 1, "workoutTargetTypeKey": "no.target"} }, { "type": "RepeatGroupDTO", "stepOrder": 2, "numberOfIterations": 6, "workoutSteps": [ { "type": "ExecutableStepDTO", "stepOrder": 1, "stepType": {"stepTypeId": 3, "stepTypeKey": "interval"}, "endCondition": {"conditionTypeId": 2, "conditionTypeKey": "time"}, "endConditionValue": 60.0, "targetType": {"workoutTargetTypeId": 4, "workoutTargetTypeKey": "heart.rate.zone"}, "zoneNumber": 5 }, { "type": "ExecutableStepDTO", "stepOrder": 2, "stepType": {"stepTypeId": 4, "stepTypeKey": "recovery"}, "endCondition": {"conditionTypeId": 2, "conditionTypeKey": "time"}, "endConditionValue": 90.0, "targetType": {"workoutTargetTypeId": 4, "workoutTargetTypeKey": "heart.rate.zone"}, "zoneNumber": 2 } ] }, { "type": "ExecutableStepDTO", "stepOrder": 3, "stepType": {"stepTypeId": 2, "stepTypeKey": "cooldown"}, "endCondition": {"conditionTypeId": 2, "conditionTypeKey": "time"}, "endConditionValue": 600.0, "targetType": {"workoutTargetTypeId": 1, "workoutTargetTypeKey": "no.target"} } ] }] }
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| workout | Yes | JSON string of the workout object to create |