Skip to main content
Glama

create_workout

Build a structured Rouvy workout in a rider's library from % FTP steady, ramp, or free-ride steps with optional cadence ranges and repeats, saved private by default and returned as stored.

Instructions

Create a Workout in the rider's Rouvy library, only when they ask for one. Steps are steady, ramp or free ride, in % FTP (use get_workout's rider_ftp_w to convert watts), each with an optional cadence range; repeat a block with a repeat Step. Private unless the rider asks for public. Returns the saved Workout as Rouvy has it. If it says the outcome is unknown, call list_workouts before trying again.

Input Schema

NameRequiredDescriptionDefault
cuesNoText Cues shown during the Workout.
nameYes1–200 characters.
tagsNoTraining effects, at most 3.
stepsYesThe Steps in order, at least 30 s in all. A repeat is flattened: Rouvy stores and returns flat Steps.
route_idNoThe route to ride it on, as get_workout returns it. Default: Rouvy's suggested route.
visibilityNoprivate (the default), or public only when the rider asks.
descriptionNoFree text.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.3.0

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare a non-read-only, non-idempotent, non-destructive write. The description adds real value beyond that: private-by-default visibility, the fact that Rouvy flattens repeat blocks in storage, that the saved Workout is returned, and a specific recovery path for unknown outcomes that directly explains the non-idempotent semantics. Auth/permission behavior is the main omission.

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?

Dense but front-loaded: the create action leads, followed by step-model guidance, privacy default, return behavior, and retry rule. No sentence is wasted, though the parenthetical about FTP conversion and the retry clause pack a lot into a small space.

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 7-parameter write tool with full schema coverage and no output schema, the description covers invocation gating, step semantics, visibility defaults, return shape, and non-idempotent recovery. Remaining gaps such as permissions or detailed cue/tag semantics are adequately handled by the schema.

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 100%, so the baseline is 3. The description still adds meaning beyond the schema by framing step types (steady, ramp, free ride), the % FTP convention, optional cadence, and repeat blocks, plus the pointer to get_workout for watt conversion.

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?

States a specific verb and resource ('Create a Workout in the rider's Rouvy library') and scopes it with 'only when they ask for one', which clearly separates it from read/update/delete siblings. An agent can identify the operation without opening the schema.

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?

Names the conditions and the alternatives explicitly: use get_workout's rider_ftp_w to convert watts, default to private unless the rider asks for public, and call list_workouts before retrying when the outcome is unknown. These are concrete routing and gating rules rather than implied behavior.

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