Skip to main content
Glama

Nolio

Create a planned workout

create_planned_training

Create a planned training workout on the calendar of one or more athletes, of a group, or of yourself. Required: date_start, name, sport. Audience is optional — At most one of "athletes" or "group" — never both. Omit both to target your own calendar (self). Express targets portably (zone, % of metric): the server resolves absolute values per athlete. 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. Before scheduling anything on a period, read what is already there in one call: get_calendar with mode='planned' over the window (and athlete for a managed athlete) renders the workouts, competitions, cycles, notes and quizzes at once; surface the conflicts before proposing. Returns the normalized event with a human-readable summary: check it against the request. A multi-week plan is more than isolated workouts: the calendar also carries the A-race goal (posted first, the plan hangs off it), cycles (mesocycles of one to several weeks, on planned/cycles/) that structure the base/build/peak/taper phases, and notes as markers (reminders, rest days, key dates). A hand-built plan usually combines all of these, not workouts alone.

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.
timeNoStart time, HH:MM. Mutually exclusive with "moment" — provide at most one of the two.
colorNoHex color overriding the sport color, e.g. "#1E64E6".
groupNoPublic group id from list_athletes (e.g. grp_…), for a collective workout. At most one of "athletes" or "group" — never both. Omit both to target your own calendar (self).
sportYesThe workout's sport: the `sport` field (spt_…) of a list_sports entry of the audience, never its `id` (spu_…). Never guess.
momentNoPart of day. Mutually exclusive with "time" — provide at most one of the two.
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.
athletesNoPublic athlete ids from list_athletes (e.g. usr_…) — an array even for a single athlete. At most one of "athletes" or "group" — never both. Omit both to target your own calendar (self).
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.
date_startYesScheduled date, YYYY-MM-DD. Relative dates always resolve forward: a named weekday = the next occurrence, today included. Past dates are allowed (coaches backfill plans) — but confirm with the user before creating when a resolved date unexpectedly lands in the past.
recurrenceNoRepeat as on the web. A rule change requires recurrence_action following or all and rebuilds that selection; null with action all keeps only the selected event. The audience (athletes or group) only changes with action one, one occurrence at a time, and never together with a rule change.
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.6/5.0
Behavior4/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=false), it discloses the return shape (normalized event plus human-readable summary to verify against the request) and a batching/throttle behavior with confirmation flow. It stops short of stating permission requirements or exactly what a dry_run failure set looks like, keeping it below a 5.

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 required fields are front-loaded and the batching escape hatch is prominent, but the closing paragraph about A-race goals, cycles, and notes describes plan-building philosophy rather than how to invoke this specific tool, which dilutes the focus somewhat.

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 22-parameter tool with heavy nested structured content and no output schema, the definition covers targeting, portability of targets, the null/patch semantics caveat (workout to null does not null derived totals), and return verification — enough for an agent to call it correctly without guessing.

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 100% schema coverage the schema already documents parameters, but the description adds genuine cross-field meaning: the audience exclusivity, the portability of targets (zone/% resolved per athlete), and a fallback rule that unexpressible intent goes in a node comment rather than being approximated into another field.

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 first sentence gives a specific verb (create) plus resource (planned training workout) and enumerates all three target audiences (athletes, group, self), so its scope against create_planned_event/update_planned_training is clear without opening schemas. Required fields are stated up front.

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?

It gives explicit when/when-not rules: at most one of athletes/group, omit both for self, and a hard escape hatch — if a request expands beyond 3 operations, do not loop, use nolio_api_write with dry_run=true and a confirm_token. It also prescribes a pre-read via get_calendar before scheduling to surface conflicts.

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