Skip to main content
Glama

Nolio

Create a workout template

create_training_frame

Create a reusable workout template in the coach's library (personal by default, or a team library via "team"). A template has no date and no athletes — schedule it later with apply_training_frame. Zone and % targets stay portable and are resolved per athlete when the template is applied. If no schema field expresses a detail of the coach's intent, put it in the comment of the relevant node — never approximate it into another field, never drop it. If a request expands to more than 3 creations, updates or deletions, do not call this tool in a loop: send them all as one POST batch/ via nolio_api_write with dry_run=true (PATCH and DELETE on planned// and library// included), get the user's go-ahead on a plain-language recap of what will change on whose calendar, then resend the same operations with the returned confirm_token. Returns the normalized template with a human-readable summary.

Input Schema

NameRequiredDescriptionDefault
rpeNoPlanned RPE (0-10) — the coach's intended effort.
nameYesWorkout title.
tagsNoPublic tag ids from list_tags (e.g. tag_…) — your own tags, existing only, no creation here.
teamNoPublic team id from list_athletes (e.g. team_…) to store the template in the team library. Default: the coach's personal library. A team you are only an assistant of is refused.
colorNoHex color overriding the sport color, e.g. "#1E64E6".
sportYesThe workout's sport: the `sport` field (spt_…) of a list_sports entry of the audience, never its `id` (spu_…). Never guess.
dry_runNoValidate without writing anything. Problems found on the workout steps and targets (zones, metrics, exercises) come back together, one per step or target; any other problem (payload shape, athlete, sport, date, tags) comes back alone: fix it and dry run again until it comes back valid.
tonnageNoPlanned total tonnage (reps x load of the weighted sets): to override the total derived from the structured content. Null goes back to the derived total.
workoutNoOptional structured content — a simple planned workout without it is a common, legitimate case. Patching it to null clears the structure but NOT duration/distance/rpe: null those explicitly too if they were derived from it.
categoryYesREQUIRED. Public library category id from list_library_categories (an `event` folder, e.g. cat_…) to file the template under. A template without a category is invisible in the library — always cite one.
distanceNoPlanned total distance — for a workout without structured content, or to override the total derived from it.
durationNoPlanned total duration — for a workout without structured content, or to override the total derived from it.
show_rpeNoMake the planned RPE visible to the athlete. Default false: coach-only, so it does not bias the athlete's perceived effort.
coggan_loadNoCoggan load (TSS) set by hand, overriding the value computed from the structured content or estimated from RPE and duration. Kept until set to null, which goes back to the computed value. Read `load.coggan` for the load in effect and `load.coggan_source` for where it comes from (`rpe` = estimate, never set by hand).
descriptionNoPlain text shown at the top of the workout. Line breaks are preserved, use them to separate distinct instructions. Accepted only while the workout has no description: to change an existing one, send description_html.
elevation_gainNoPlanned elevation gain — not derivable from the structured content.
elevation_lossNoPlanned elevation loss, not derivable from the structured content.
description_htmlNoThe description as stored, in HTML, without the structured workout. The only way to change a description that is already set: read it with with_description_html=true, edit only what must change, keep every other tag, and send it back whole. Null on a read that did not ask for it, ignored on write.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only say it is a non-read-only, non-destructive, closed-world write; the description adds what the annotations cannot: zone and % targets are stored portable and resolved per athlete at apply time, the response is a normalized template plus a human-readable summary, and multi-write batches require a plain-language recap and user approval before re-sending. Nothing here contradicts readOnlyHint=false.

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?

Purpose and the template-vs-scheduled distinction are front-loaded, and the denser batch-protocol paragraph is placed last where it belongs. It is tightly written but the middle sentences stack three separate rules (portability, comment fallback, batch threshold) into one block, costing a little scannability.

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 an 18-parameter tool with deep nested workout nodes and no output schema, the description covers creation scope, library targeting, the portability contract that governs every target, the escalation path for bulk operations, and the return shape. The remaining details (field-level formats, enum values, required category) are fully documented in 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 coverage is 100%, so the schema already carries per-parameter meaning (team defaulting to personal, category being required for library visibility, sport/zone/metric quoting rules). The description still adds cross-cutting semantics: the portability model for zone/% targets and the instruction to route unexpressible intent into node comments rather than approximate it into another field. Incremental, but real 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 opens with a specific verb and resource ("Create a reusable workout template in the coach's library") and immediately scopes it against the calendar-based siblings: "A template has no date and no athletes — schedule it later with apply_training_frame." An agent can distinguish this from create_planned_training or update_training_frame without opening any 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?

Explicit routing in both directions: use apply_training_frame later to schedule, and if the request expands past three writes, do not loop this tool — batch through nolio_api_write with dry_run=true and a confirm_token. It also gives a fallback rule for details the schema cannot express (put them in a node comment, never approximate or drop). This is unusually complete when-to-use guidance.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources