Skip to main content
Glama

Plan training for a race

plan_for_race
Read-only

Use this when the user names a race they are training for, for example "IRONMAN 70.3 Barranquilla", "I signed up for the half ironman in Cartagena" or "Chicago Marathon". It finds the race in Phorme's race listings (name, date, city and the race's own page), counts the weeks to race day, and returns the week of Phorme's plan for that kind of race that lines up with race day, with sets, reps, paces, coach notes and a demo link for each exercise. For a triathlon (IRONMAN 70.3, 5150, full) it is swim, bike and run in one plan, with efforts until the athlete's swim and bike tests are in. When the organiser has given them, the race's own logistics come with it (venue, where to pick up the race packet, airport, official hotels from the organiser), with the page and date they were read. It reads only and changes nothing. If the race is not listed it says so; never guess a race date. Do not use it for injury rehab or nutrition.

Input Schema

NameRequiredDescriptionDefault
raceYesThe race as the user named it, for example "IRONMAN 70.3 Barranquilla".

Output Schema

NameRequiredDescriptionDefault
raceYesThe race as listed: name, city, country, on (YYYY-MM-DD, null when not yet published), url (the race's own page), registration, and logistics: the race's own venue, packet_pickup, airport, getting_there, hotels (up to 6 official hotels, each name, url and note), course_url, athlete_guide_url, source_url and checked_on, as the organiser listed them, or null.
brainNoThe Phorme coaching brain the plan follows: name, coach and how_it_trains.
limitsYesWhat this plan does not cover and where its dates come from. Tell the user.
programNoThe plan: title, weeks and days_per_week, and its summary.
days_outNo
sessionsYesThe sessions of that week, each with a title and exercises.
starts_onNoWhen the race is further off than the plan, the day the plan's first week starts.
weeks_outNo
week_numberNoThe week of the plan these sessions are.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / properties / race / description
      Previous value: -"The race as listed: name, city, country, on (YYYY-MM-DD, null when not yet published) and url, the race's own page."New value: +"The race as listed: name, city, country, on (YYYY-MM-DD, null when not yet published), url (the race's own page), registration, and logistics: the race's own venue, packet_pickup, airport, getting_there, hotels (up to 6 official hotels, each name, url and note), course_url, athlete_guide_url, source_url and checked_on, as the organiser listed them, or null."
  2. Added

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/destructiveHint=false and openWorldHint=false, and the description reinforces that ('reads only and changes nothing'), but it also adds genuinely non-structural behavior: it discloses refusal semantics ('If the race is not listed it says so; never guess a race date') and the provenance of race logistics (page and date they were read). The one gap is that most of the returned-content detail duplicates the output schema.

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 critical usage trigger is correctly front-loaded, but the single ~200-word paragraph for a one-parameter tool carries redundancy: the enumeration of sets/reps/paces/coach-notes/demo-link return values overlaps the output schema, and 'reads only and changes nothing' repeats the readOnlyHint annotation. Several sentences could be trimmed without losing callable 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?

Given a single string parameter, full annotation coverage and an output schema, the description supplies everything else an agent needs: the trigger, the triathlon-vs-single-sport scope (swim/bike/run in one plan for IRONMAN 70.3/5150/full), the not-listed failure path, and what data comes back inclusive of race logistics provenance.

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 a single required parameter and 100% schema description coverage, the baseline is 3, but the description adds real semantics by showing three colloquial, possibly fuzzy namings ('IRONMAN 70.3 Barranquilla', 'I signed up for the half ironman in Cartagena', 'Chicago Marathon'), telling the agent that free-form user phrasing is expected and resolved against the listings.

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 names a specific action chain (find the race in Phorme's listings, count weeks to race day, return the matching plan week) rather than restating the title. An agent can distinguish it from siblings like find_races or get_phorme_program without opening any schema, because it states it produces a training plan keyed to a race date.

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?

It gives a clear trigger condition (the user names a race they are training for) with three concrete utterance examples, plus explicit exclusions ('Do not use it for injury rehab or nutrition'). It stops short of naming which sibling to use instead for those excluded cases, so it is clear context rather than full when/when-not/alternative routing.

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.