Skip to main content
Glama
k-schmidt

Garmin Workout Pipeline

by k-schmidt

Garmin Workout Pipeline

PyPI License: MIT GitHub stars Python 3.10+

Stop clicking through Garmin Connect's UI to build every workout. Define workouts in YAML, or just tell Claude what you want in plain English — then push them straight to your watch.

Garmin Workout Pipeline is an open-source CLI and MCP server that compiles structured workout definitions into Garmin Connect API payloads. It supports running, cycling, and strength/cardio workouts with pace/HR/power zones, 84+ exercises, circuits, and weekly scheduling.

"Build me a Hyrox sim with 8 stations, 1km runs between each, and a 10-minute warmup."

That's a real prompt. The MCP server turns it into a fully structured Garmin workout and uploads it to your watch.


Why This Exists

If you've ever built a complex interval workout in Garmin Connect, you know the pain: endless dropdowns, no copy-paste, no version control, and good luck reusing that Hyrox sim you spent 15 minutes clicking together.

This tool lets you:

  • Write workouts as code — YAML files you can version, share, and iterate on

  • Build workouts conversationally — tell Claude what you want via MCP, and it handles the structure

  • Push to Garmin Connect in one command — from terminal to watch in seconds

  • Manage your training library — list, schedule, and delete workouts programmatically


Related MCP server: Garmin Workouts MCP Server

Quickstart

# Install
pip install garmin-workout-pipeline

# Set credentials
export GARMIN_EMAIL=you@example.com
export GARMIN_PASSWORD=your-password

# Push a workout to your watch
gwp push workouts/templates/hyrox-sim.yaml --zones workouts/zones.yaml

That's it. Workout is on Garmin Connect, ready to sync to your device.


Two Ways to Build Workouts

1. YAML (version-controlled, repeatable)

name: "Threshold Intervals"
type: running

steps:
  - warmup: { duration: "10:00", zone: easy }
  - run: { distance: "1km", pace: { min: "6:25/mi", max: "6:40/mi" } }
  - recovery: { duration: "2:00" }
  - run: { duration: "5:00", zone: threshold }
  - cooldown: { duration: lap, zone: easy }

2. Natural Language via MCP (conversational, fast)

Connect the MCP server to Claude Desktop or Claude Code, then just describe what you want:

"Create a 5x1km workout at threshold pace with 2-minute recoveries, 10-minute warmup and cooldown"

Claude builds the structured workout, previews it, and uploads it — all through conversation.


MCP Server Setup

24 tools for full workout lifecycle management through any MCP-compatible client.

Claude Code

claude mcp add garmin-workouts \
  -e GARMIN_EMAIL=your-email@example.com \
  -e GARMIN_PASSWORD=your-password \
  -- garmin-mcp

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "garmin-workouts": {
      "command": "garmin-mcp",
      "env": {
        "GARMIN_EMAIL": "your-email@example.com",
        "GARMIN_PASSWORD": "your-password"
      }
    }
  }
}

Category

Tools

Workout

create_workout, get_workout, set_workout_name, clear_workout

Steps

add_warmup, add_cooldown, add_run, add_bike, add_exercise, add_rest, add_recovery, remove_step

Circuits

add_circuit, end_circuit

Garmin Connect

preview_upload, upload_workout, list_workouts, delete_workout

Reference

list_exercises, get_zones, validate_workout

Templates

save_yaml, load_template, list_templates


CLI Reference

gwp push <file> --zones <zones.yaml>            # Upload workout to Garmin Connect
gwp push <file> --zones <zones.yaml> --schedule 2026-04-29  # Upload + schedule
gwp push <file> --zones <zones.yaml> --dry-run   # Preview JSON without uploading
gwp validate <file> --zones <zones.yaml>          # Compile and validate only
gwp list                                          # List workouts on Garmin Connect
gwp delete <workout-id>                           # Delete a workout
gwp zones --zones <zones.yaml>                    # Show resolved zone values

Workout Types

Running

Pace targets, HR zones, distance and time-based intervals.

name: "Speed 400s"
type: running
steps:
  - warmup: { duration: "10:00", zone: easy }
  - run: { distance: "400m", pace: { min: "5:30/mi", max: "5:45/mi" } }
  - recovery: { duration: "1:30" }
  - cooldown: { duration: "10:00", zone: easy }

Strength / Cardio

84 exercises with rep counts, weights, and circuit support.

name: "Hyrox Strength"
type: strength
steps:
  - warmup: { duration: lap, exercise: rowing_machine }
  - circuit:
      iterations: 4
      steps:
        - exercise: { exercise: wall_ball, reps: 20, weight: 13 }
        - exercise: { exercise: weighted_lunge, reps: 20, weight: 45 }
        - rest: { duration: "2:00" }
  - cooldown: { duration: lap, exercise: rowing_machine }

Cycling

Power zones, FTP percentages, and duration-based blocks.

name: "Sweet Spot"
type: cycling
steps:
  - warmup: { duration: "10:00", zone: z2 }
  - bike: { duration: "20:00", zone: threshold }
  - cooldown: { duration: "5:00" }

Step Types Reference

Type

End Conditions

Targets

warmup

duration, lap

zone, exercise

cooldown

duration, lap

zone, exercise

run

duration, distance, lap

zone, pace, hr

bike

duration, distance, lap

zone, power, power_pct

recovery

duration, distance, lap

zone

exercise

duration, reps, lap

rest

duration

circuit

iterations

nested steps


Zones

Define your training zones once in workouts/zones.yaml with HR, pace, and power targets per sport. The compiler resolves zone names like threshold, z2, and easy to Garmin API target values.


Installation Options

pip install garmin-workout-pipeline

From GitHub

uv tool install git+https://github.com/k-schmidt/Garmin-Workout-Pipeline.git

From Source

curl -LsSf https://astral.sh/uv/install.sh | sh
git clone https://github.com/k-schmidt/Garmin-Workout-Pipeline.git
cd Garmin-Workout-Pipeline
uv sync

Project Structure

garmin_pipeline/
  mcp_server.py          # MCP server for Claude Desktop/Code
  cli.py                 # Click CLI (gwp command)
  compiler.py            # Workout model → Garmin API JSON
  exercises.py           # Exercise name → Garmin category/name registry
  loader.py              # YAML parser with !include support
  models.py              # Pydantic workout models
  sync.py                # Garmin Connect auth and upload
  zones.py               # Zone resolution (HR, pace, power)
workouts/
  zones.yaml             # Training zone definitions
  templates/             # Workout YAML files
tests/
  fixtures/              # Golden reference JSON
  test_compiler.py       # Compiler golden tests
  test_loader.py         # YAML loading and !include
  test_models.py         # Step parsing
  test_zones.py          # Zone resolution

Development

uv run pytest -v              # run tests
uv run ruff check . --fix     # lint
uv run ruff format .          # format

Contributing

Contributions welcome. Open an issue or submit a PR — whether it's a new exercise, a workout template, a bug fix, or documentation improvement.


License

MIT

Available Tools

24 tools
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.

ParametersJSON Schema
NameRequiredDescriptionDefault
durationNo
distanceNo
zoneNo
power_minNo
power_maxNo
power_pct_minNo
power_pct_maxNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description bears full burden. It discloses parameter constraints but does not mention side effects, error behavior, or where the step is added (e.g., appending to current workout).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences plus a bulleted parameter list. Each sentence provides essential information. No fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers parameter constraints well, but does not explain the return value or how the step integrates into a workout. Output schema exists but is not referenced in description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description compensates fully: it provides format notes ('M:SS', '10km'), pairing rules (power_min with power_max), and constraints (set exactly one end condition).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with 'Add a cycling interval step,' providing a clear verb and resource. It distinguishes from siblings by specifying 'cycling' and outlines end condition and target constraints.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit rules for end condition and target, telling users what combinations are allowed. However, it does not compare to other add tools in the sibling list, leaving the context of choosing this tool over others implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
iterationsYes
skip_last_restNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It explains the basic effect (steps added after go inside) and the parameters, but does not disclose potential side effects, permissions, or error conditions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief and front-loaded, with a clear purpose sentence followed by lifecycle instruction and parameter details. No superfluous words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the tool's purpose, usage lifecycle, and parameters. Although output schema exists, the description does not mention return value, but that is acceptable. Overall sufficient for opening a circuit in a workout builder context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description adds clear explanations for both parameters: iterations and skip_last_rest. It goes beyond the schema which only provides types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it opens a new circuit/repeat group and describes the behavior of subsequent steps being inside it. Differentiates from siblings like add_exercise and end_circuit by explaining the grouping role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs to call end_circuit when done, providing clear lifecycle guidance. However, it does not specify when not to use this tool or mention alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
durationNolap
zoneNo
exerciseNo
notesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It does not describe what happens when a cooldown is added (e.g., append to workout, any side effects). Only parameter details are given, leaving behavioral uncertainty.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with a clear Args section. Every sentence adds value with no redundancy. The key action is front-loaded in the first sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters and no annotations, the description covers parameter semantics but lacks behavioral context (e.g., how cooldown integrates into a workout, prerequisites). The existence of an output schema reduces the need to describe return values, but overall completeness is average.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description explains each parameter's meaning: duration format 'M:SS' or 'lap', zone as training zone name, exercise for strength cooldowns, notes for watch display. This adds significant value beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Add a cooldown step,' which is a specific verb+resource combination. Among siblings like add_warmup and add_recovery, this uniquely identifies the tool's purpose without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit guidance on when to use this tool versus alternatives like add_warmup or add_recovery. The context of a cooldown step is implied but not differentiated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
exerciseYes
durationNo
repsNo
weightNo
notesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden. It discloses the end condition constraint (set reps OR duration OR neither) and recommends list_exercises. However, it omits behavioral traits like whether it validates exercise names, modifies a workout in progress, or requires a prior create_workout. The disclosure is partial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief and well-structured: a one-line purpose, a clarifying sentence on end condition, then bullet-pointed args. Every sentence adds value; no redundancy. Perfectly sized for quick comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Parameter details are complete, and an output schema exists (so return values need not be explained). However, the description misses workflow context: it does not mention that a workout must be created first (via create_workout) or that this step is added to a current workout. This gap could mislead an agent into calling add_exercise without a workout context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description compensates fully. It explains each parameter: exercise (name, examples, list_exercises), duration (format 'M:SS' or 'lap'), reps (integer), weight (lbs), notes (display text). This adds significant meaning beyond field types and defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool adds a strength/cardio exercise step, specifying the verb 'add' and resource 'exercise step'. It distinguishes from sibling tools like add_bike or add_run through the 'strength/cardio' qualifier, though not explicitly naming alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for adding exercise steps with an end condition, but does not explicitly state when to use this tool over siblings like add_bike or add_run. The mention of list_exercises provides a hint for pre-usage, but no when-not-to scenarios or alternative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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").

ParametersJSON Schema
NameRequiredDescriptionDefault
durationNolap
distanceNo
zoneNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It explains that the tool adds a recovery step and describes the parameters. It does not contradict any annotations (none exist). However, it could be more transparent about behaviors like insertion location if not after the last interval.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: two sentences plus a parameter list. Every sentence provides essential information without redundancy. It is front-loaded with the core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity is low (adding a step) and an output schema exists (so return values are covered elsewhere), the description is largely complete. It could mention the insertion point more explicitly, but it suffices.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates well by explaining duration format ('M:SS' or 'lap'), distance example ('200m'), and zone meaning. This adds meaningful context beyond the schema's type-only definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Add a recovery step between intervals', which is a specific verb and resource. It distinguishes from sibling tools like 'add_rest' and 'add_cooldown' by specifying the context 'between intervals'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when building a workout between intervals, but does not explicitly state when to use this versus alternatives like 'add_rest'. No when-not or alternative guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_restB

Add a rest step.

Args: duration: Rest duration as "M:SS" (e.g. "2:00" for 2 minutes).

ParametersJSON Schema
NameRequiredDescriptionDefault
durationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits like side effects (modifying the current workout) or required state. It only says 'Add' without clarifying that it appends to an existing workout or if it requires a created workout. The agent is left guessing about context and mutability.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: one sentence for purpose followed by a clear parameter definition with format and example. No redundant words. It is front-loaded and structured with a labeled Args section, earning its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (1 parameter) and existence of an output schema, the description minimally covers the functionality. However, it does not explain the overall context (e.g., that this step is added to a workout under construction) or mention related concepts like ordering. It is adequate but lacks completeness for a full behavioral understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema coverage is 0%, so the description must compensate. It explains the 'duration' parameter with format 'M:SS' and an example. This adds sufficient meaning beyond the schema, though a note that minutes and seconds are digits would improve clarity. The explanation is adequate for a single simple parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Add a rest step,' identifying the verb (add) and resource (rest step). It distinguishes from sibling tools like add_exercise or add_bike, which are different step types. However, it could be more explicit about the context (e.g., adding to a workout definition), but the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives such as add_recovery or add_cooldown. The description does not mention prerequisite conditions (e.g., an active workout), making it hard for an agent to decide when to invoke it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
durationNo
distanceNo
zoneNo
pace_minNo
pace_maxNo
hr_minNo
hr_maxNo
notesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the structure of the run step (end condition, target) and parameter constraints. However, it does not mention side effects, permissions, or prerequisites (e.g., whether a workout must exist). It adds value but is not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: a few sentences followed by bullet-pointed parameter details. It is well-structured, starting with the main purpose, then constraints, then parameter explanations. No unnecessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (8 parameters, many optional with constraints) and the presence of an output schema, the description covers essential aspects like parameter relationships. It lacks explicit context about where the step is added (e.g., to a workout), but sibling tool names imply it is part of a workout-building workflow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must compensate. It does so thoroughly, explaining each parameter's format (e.g., duration as 'M:SS' or 'lap', distance like '1km') and constraints (e.g., pace_min must pair with pace_max). This adds significant meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Add a running interval step' with a specific verb and resource. It distinguishes from siblings like add_bike, add_circuit, etc., and provides details on end condition and target options.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit constraints: set exactly one of duration, distance, or neither; and set one of zone, pace range, HR range, or none. It also specifies required pairing for pace and HR parameters. However, it lacks explicit comparison to alternative tools or when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
durationNolap
zoneNo
exerciseNo
notesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. The description only says 'Add a warmup step' without detailing behavioral traits like whether it can be called multiple times, side effects, or authorization needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with a clear first line. The parameter list is structured in docstring format. Could be slightly more streamlined, but no unnecessary content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate given the parameter count and lack of output schema details. However, it omits information about ordering (warmup is typically first), return values, or constraints.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description adds meaning: duration format ('M:SS' or 'lap'), zone as training zone, exercise for strength warmups, and notes for display. This compensates well for schema gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Add a warmup step.' This distinguishes it from sibling tools like add_bike or add_exercise, but does not explicitly differentiate beyond the name and context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives (e.g., add_cooldown or add_recovery). The description does not mention typical placement or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

clear_workoutA

Clear the current workout and start fresh.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries burden. It indicates destructive action (clearing workout) but does not specify if it affects saved state, requires confirmation, or is undoable. Adequate but could add detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with no filler. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 0 parameters and a simple action, the description is sufficient. Output schema exists (not shown) but is not needed for clarity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters; schema coverage is 100% trivially. Description adds nothing beyond schema, but baseline for 0 params is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the verb and resource: 'Clear the current workout and start fresh.' It distinguishes from siblings like 'delete_workout' (which likely deletes file) and 'remove_step' (step-level removal).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use versus alternatives like 'create_workout' or 'delete_workout'. The description simply states what it does without context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description carries full burden. It only says 'Create a new workout' without disclosing side effects, requirements, or what happens upon creation. Does not mention state changes or permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Very concise: two sentences plus arg descriptions. No fluff. Front-loaded with the purpose. Every word is relevant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema (present), return values need not be explained. However, the description lacks context such as prerequisites or follow-up steps (e.g., adding exercises). For a simple create tool, it is adequate but could be more complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description must compensate. It provides examples for name ('Workout name (e.g. Hyrox Race Sim)') and lists valid types for 'type', adding meaning beyond schema titles. This helps the agent choose values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Create a new workout', which is a specific verb+resource. It distinguishes from sibling tools like add_exercise, add_run, etc., which add steps to existing workouts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives. Does not mention that a workout should be created before adding steps, or any prerequisites. The description is silent on usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_workoutA

Delete a workout from Garmin Connect.

Args: workout_id: Garmin workout ID (from list_workouts).

ParametersJSON Schema
NameRequiredDescriptionDefault
workout_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. The description states 'Delete' implying a destructive action but does not mention irreversibility, authorization needs, or other behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise with two sentences. The main action is front-loaded, and every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter and an output schema, the description is adequate. It covers purpose and parameter source, though could mention irreversibility.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds context to the sole parameter 'workout_id' by specifying 'Garmin workout ID (from list_workouts)', which is not present in the input schema. Schema coverage is 0%, so the description compensates well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Delete a workout from Garmin Connect' uses a specific verb and resource, clearly distinguishing it from sibling tools like list_workouts and create_workout.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives. The only hint is 'from list_workouts', but no explicit when-to-use or when-not-to-use information.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

end_circuitA

Close the current circuit. Subsequent steps will be added at the parent level.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and clearly discloses the behavioral effect (subsequent steps go to parent level). However, it does not mention potential error conditions like no open circuit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: two sentences with no wasted words. The action is front-loaded and immediately clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple parameterless tool with an output schema, the description is complete. It explains the purpose and the effect on the workflow hierarchy.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, and schema coverage is 100%, so baseline is 3. The description adds no parameter information, which is acceptable given zero parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Close the current circuit') and explains the effect on subsequent steps, distinguishing it from sibling tools like add_circuit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly tells when to use (after a circuit is started) and the consequence, but does not explicitly state when not to use or list alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_workoutB

Get the current workout summary.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, and the description does not disclose any behavioral traits such as side effects, rate limits, or data scope. As a read operation, it should at least state it is non-destructive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that gets straight to the purpose. No wasted words, but could benefit from slightly more structure or context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema, the minimal description is adequate but leaves ambiguity about what 'current workout summary' contains (e.g., steps, duration). More context would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist (0 params), so schema coverage is 100%. Baseline score of 4 applies; description does not need to add parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves a 'current workout summary', providing a specific verb and resource. It distinguishes from sibling tools like list_workouts (which lists all workouts) and create_workout, but does not define 'current' precisely.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives (e.g., list_workouts or get_zones). No context about prerequisites or typical scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_zonesA

Show available training zones from zones.yaml.

Args: sport_type: Filter by sport — "running" or "cycling". Shows all if omitted.

ParametersJSON Schema
NameRequiredDescriptionDefault
sport_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but description transparently indicates a read-only operation (reading from a file) with optional filtering. No side effects mentioned, but it's clearly a retrieval tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise with two sentences plus a parameter description. Front-loaded with purpose, no redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple lookup tool with an output schema, the description covers the input parameter sufficiently. No need to explain return values due to output schema presence.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description fully explains the only parameter: its purpose, valid values ('running' or 'cycling'), and default behavior. This completely compensates for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool shows available training zones from a specific file. The verb 'Show' and resource 'training zones' are specific, and the tool is distinct from sibling tools focused on workout creation and management.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Describes the optional sport_type filter with explicit values and default behavior ('Shows all if omitted'). However, no guidance on when not to use or alternatives among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_exercisesB

List available exercises for strength/cardio workouts.

Args: filter: Optional filter string to search by name or category.

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must fully disclose behavior. It correctly indicates a read-only list operation and mentions the optional filter. However, it does not disclose details like pagination, rate limits, or data source freshness. Since the tool is simple and the operation is obvious, a score of 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: one sentence for purpose and one line for the parameter. It is front-loaded with the main action and avoids any unnecessary information. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one optional parameter) and the presence of an output schema (so return values are documented elsewhere), the description is largely complete. It provides the essential purpose and parameter semantics. However, it could benefit from mentioning that the list is of exercises available for use in workouts, but this is already implied.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must add meaning. It describes the filter parameter as an optional string to search by name or category, which adds value beyond the schema's bare type definition. However, it does not specify the expected format or behavior (e.g., partial match, exact match), leaving some ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool lists available exercises for strength and cardio workouts. It uses a specific verb ('list') and resource ('available exercises') with a clear scope. While it does not explicitly differentiate from sibling tools, the purpose is unambiguous and distinct from the majority of siblings that deal with adding or managing workouts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, such as other list tools like list_templates or list_workouts. There is no mention of prerequisites, context, or exclusions. The user must infer usage from the purpose alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_templatesA

List available YAML workout templates in workouts/templates/.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It correctly implies a read-only listing operation with no side effects, but does not disclose details like sorting, ordering, or whether only filenames or full paths are returned. The presence of an output schema mitigates this slightly, but behavioral transparency is minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the purpose without any extraneous words or repetitions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless listing tool with an output schema, the description is complete: it specifies what is listed and where. No additional information is necessary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so schema coverage is 100% trivially. The description adds context by specifying the type ('YAML workout templates') and location, which provides meaning beyond the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'list' and the resource 'available YAML workout templates', and explicitly distinguishes the location 'in workouts/templates/', differentiating it from sibling tools like list_workouts or list_exercises that list different resources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide explicit guidance on when to use this tool versus alternatives such as load_template or list_workouts. Usage is implied as a preliminary step before loading a template, but no exclusions or context are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_workoutsB

List all workouts on Garmin Connect.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It only states it lists workouts, without disclosing authentication needs, response size, or performance implications. The read nature is implied but not explicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that is concise and front-loaded. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is minimally adequate for a simple list operation, but lacks details on scope (all workouts for which user?), pagination, ordering, or output format. With an output schema existing but not described, some gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters, so the description need not add parameter info. The baseline for 0 params is 4, and the description is sufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (list) and resource (workouts) and platform (Garmin Connect). It is specific but does not distinguish from siblings like get_workout or list_templates, though the verb 'list' implies a collection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives (e.g., get_workout for a single workout, list_templates for templates). No context on prerequisites or limitations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

load_templateA

Load a workout from a YAML template file.

Args: path: Path to the YAML file (e.g. "workouts/templates/hyrox-sim.yaml").

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description does not disclose side effects, such as whether loading overwrites the current workout, requires authentication, or has rate limits. Without annotations, the description carries the full burden, but it only states the action without behavioral details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: one sentence for the purpose and a single line for the parameter. Every sentence is necessary, and no words are wasted. The structure is front-loaded with the action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the description covers the basic action and parameter, it omits important context such as whether loading a template replaces the current workout, error handling, or file format constraints. The presence of an output schema reduces the need to explain return values, but the missing operational context lowers completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has a single required string parameter 'path' with 0% description coverage. The description adds clear semantics: 'Path to the YAML file (e.g. "workouts/templates/hyrox-sim.yaml")', providing an example and file type, which significantly aids the agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action ('Load') and resource ('a workout from a YAML template file'). It distinguishes itself from sibling tools like list_templates (listing) and preview_upload (previewing) by specifying that it loads a file into a workout.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives (e.g., preview_upload, save_yaml). The description does not mention prerequisites (e.g., whether the file must exist) or any conditions under which loading is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries burden. It indicates non-destructive preview behavior but does not detail what exactly happens (e.g., return format or side effects). Adequate but minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with purpose, no wasted words. Efficient and clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters, no annotations, and presence of an output schema, the description is largely complete. It could mention the nature of the preview output but is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters (0 params, schema coverage 100%). Description does not need to add parameter info. Baseline of 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Preview the workout that would be uploaded to Garmin Connect', specifying the verb 'preview' and the resource 'workout to upload'. It distinguishes itself from siblings like 'upload_workout' and 'validate_workout'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Always call this before upload_workout so the user can review and confirm', providing clear when-to-use and ordering guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
indexYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility. It discloses that the tool removes a step (destructive) and the index format, but lacks information on side effects, reversibility, or permission requirements, which is insufficient for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with the action and key details. Every word is necessary; no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists (not shown but indicated), the description is sufficient for a simple one-parameter operation. It could mention error handling (e.g., if index is out of bounds) but is otherwise complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only specifies 'integer' for index, while the description adds that it is 1-based and references get_workout output for the correct value. This adds meaningful semantic context beyond the raw type definition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Remove a step') and the resource ('from the top-level step list'), with a specific reference to 1-based indexing, which distinguishes it from sibling tools like add_exercise or clear_workout.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use (after retrieving the workout via get_workout to know the index) but does not explicitly mention when not to use or list alternatives. It provides adequate context for a simple removal tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_yamlA

Save the current workout as a YAML template file.

Args: path: File path to save to. Defaults to workouts/templates/.yaml.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description carries full burden. It only states 'Save the current workout' without disclosing overwrite behavior, error handling, or whether the operation is destructive. For a mutation tool, more transparency is needed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two sentences: the first states the purpose, the second describes the parameter. No redundant information; well front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one optional parameter, no annotations, output schema exists), the description covers the core action but lacks detail about return values or side effects. It is minimally adequate but could mention success behavior or error conditions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaning beyond the schema: it explains the path parameter's purpose and default value ('Defaults to workouts/templates/<workout-name>.yaml'). Although schema coverage is 0%, the description compensates well for this single parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Save the current workout as a YAML template file,' providing a specific verb (save), resource (current workout), and format (YAML template). This distinguishes it from sibling tools like load_template or upload_workout.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool vs alternatives. It does not mention prerequisites, exclusions, or compare with sibling tools like 'upload_workout' or 'validate_workout.' The usage context is implied but not clarified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_workout_nameC

Rename the current workout.

Args: name: New workout name

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description must disclose behavioral traits. It only says 'rename', implying mutation, but does not mention side effects, permissions, or whether the change is reversible. This is insufficient for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short (two lines), which is efficient but at the expense of completeness. It lacks necessary context, making it borderline under-specified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, a single parameter with minimal description, and the presence of an output schema (not mentioned in description), the description fails to provide adequate context for correct tool usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must add meaning. It provides 'name: New workout name' in args, which adds little beyond the schema's 'Name' title. No format, constraints, or examples are given.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The tool name 'set_workout_name' and description 'Rename the current workout' clearly indicate a rename operation on a workout. It distinguishes from sibling tools that add, list, or delete workouts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives, nor any context about prerequisites or typical use cases. The description only states what it does.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmYes
schedule_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description discloses that the tool may replace existing workouts (destructive behavior) and requires confirm=true. It does not mention return values or error handling, but covers key side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Very concise, with important warnings front-loaded. Uses bold for emphasis and a clear list for parameters. No unnecessary sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, preconditions, parameters, and side effects. Does not explicitly mention return values, but an output schema exists. Could add more about error states, but overall sufficiently complete for a tool with an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, but the description clearly explains the purpose of each parameter: confirm must be true, schedule_date is optional with format YYYY-MM-DD. This adds significant value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Upload' and resource 'current workout to Garmin Connect', distinguishing it from sibling tools like preview_upload. It is specific and actionable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs to call preview_upload first and get user confirmation before using this tool, and warns about replacing existing workouts. Provides clear when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_workoutB

Compile the current workout and return the Garmin API JSON for inspection.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry full behavioral disclosure. It states 'compile' and 'return JSON', but does not clarify whether the tool modifies state, has side effects, requires permissions, or how it handles errors. The read-only nature is implied but not confirmed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, efficient sentence of 14 words. Every word contributes to the purpose. No fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters, the description covers the core function. However, it lacks details on validation behavior, error handling, and the effect on the current workout state. The presence of an output schema partially compensates for return value documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero parameters and 100% schema coverage, the description need not add parameter details. It adds value by specifying that the operation applies to the 'current workout', indicating state dependency.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'compile' and the resource 'workout', specifying the output as 'Garmin API JSON for inspection'. It distinguishes from siblings like 'upload_workout' and 'preview_upload' by focusing on inspection, though it doesn't explicitly contrast these tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives like 'preview_upload' or 'save_yaml'. The description implies it is for inspection before upload, but does not state prerequisites, context, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 24 tool updatesv0.1.0
    • First observedadd_bike
    • First observedadd_circuit
    • First observedadd_cooldown
    • First observedadd_exercise
    • First observedadd_recovery
    • First observedadd_rest
    • First observedadd_run
    • First observedadd_warmup
    • First observedclear_workout
    • First observedcreate_workout
    • First observeddelete_workout
    • First observedend_circuit
    • First observedget_workout
    • First observedget_zones
    • First observedlist_exercises
    • First observedlist_templates
    • First observedlist_workouts
    • First observedload_template
    • First observedpreview_upload
    • First observedremove_step
    • First observedsave_yaml
    • First observedset_workout_name
    • First observedupload_workout
    • First observedvalidate_workout

TDQS

A3.6/5.0
Disambiguation5/5

Each tool targets a distinct action (add_*, clear_workout, etc.) with no overlap. Step types are clearly differentiated by parameters and purpose.

Naming Consistency5/5

All tools follow a consistent verb_noun snake_case pattern (e.g., add_bike, list_workouts, upload_workout) with no naming conflicts.

Tool Count4/5

24 tools are slightly above the optimal range but justified by the complexity of workout creation (multiple step types, templates, upload). Not excessive.

Completeness3/5

Core CRUD for workouts and steps is present, but lacks editing existing Garmin workouts (insert step, update step) and explicit step types for sports like swimming or hiking.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

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