create_garmin_workout takes a name, a sport and structured steps, and its description states that the caller should parse the natural-language description and pass structured steps in — so what lands on the watch depends on the model doing that translation, not on validation here. The other thing to plan around is the login: authenticate_garmin opens a browser, which makes an unattended or headless setup awkward, and check_garmin_auth exists so an expired session shows up before a create call fails rather than after.
A Garmin Connect workout creator with three tools: create a structured workout, check whether the stored authentication is still valid, and start the browser login.
- Workout creation from structured steps: create_garmin_workout takes a name, a sport and the workout steps, with its own description placing the job of parsing a natural-language description onto the calling model rather than the server.
- Authentication handled as its own step: check_garmin_auth reports whether the Garmin authentication is still valid, and authenticate_garmin starts the Garmin Connect login, which opens a browser.
A Garmin Connect account, and a machine with a browser and a person at it for the login — authenticate_garmin opens a browser, and check_garmin_auth is how you find out the session has lapsed.
One command — npx -y garmin-workouts-mcp
