Skip to main content
Glama

Training plan

get_training_plan
Read-onlyIdempotent

Without plan_id, list an athlete's training plans (summaries, optionally by status). With plan_id, read that plan's workouts with full prescriptions and the activities that completed them, in whole weeks up to a response-size page; next_cursor reads the following weeks. Strength workouts carry session_kg_loads in kilograms.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "athlete_id": "<athlete_id>"
    },
    "name": "get_training_plan"
  }
}

Input Schema

NameRequiredDescriptionDefault
cursorNonext_cursor from the previous page of this tool called with the same arguments; omit for the first page.
statusNoList only plans with this status; omit for every plan but deleted.
plan_idNoA plan_instance_id from this tool's list; omit to list plans.
athlete_idYesThe athlete's user id: get_current_user's athlete_id for the connected account, or an id from get_coach_athletes or find_athlete.

Output Schema

NameRequiredDescriptionDefault
planNo
countNo
errorNo
plansNo
statusNo
messageNo
plan_idNo
privacyNoPresent when the athlete's settings withhold data.
warningsNo
next_stepNoWhat can be done next, for example after a failure.
athlete_idNo
next_cursorNoReads the next page; null on the last page.
reason_codeNo
total_weeksNo
user_contentNoFields in this result that people wrote.
weeks_returnedNo
truncated_fieldsNoLists cut to fit one response: rows returned and total.
generated_contentNoFields in this result that NexRex's AI wrote.
session_definitionsNoSessions that several rows of this result share by session_ref.
content_block_fieldsNoColumn names of every content_blocks row, nested blocks rows included.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedOutput schema / $defs / Activity / properties / content_blocks / anyOf
      Previous value: -[
      -  {
      -    "items": {
      -      "items": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "integer"
      -          },
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "boolean"
      -          },
      -          {
      -            "items": {
      -              "anyOf": [
      -                {
      -                  "type": "string"
      -                },
      -                {
      -                  "type": "integer"
      -                },
      -                {
      -                  "type": "number"
      -                },
      -                {
      -                  "type": "boolean"
      -                },
      -                {
      -                  "type": "null"
      -                }
      -              ]
      -            },
      -            "type": "array"
      -          },
      -          {
      -            "$ref": "#/$defs/LocalizedText"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "type": "array"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "items": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "integer"
      +          },
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "boolean"
      +          },
      +          {
      +            "items": {
      +              "anyOf": [
      +                {
      +                  "type": "string"
      +                },
      +                {
      +                  "type": "integer"
      +                },
      +                {
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "boolean"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ]
      +            },
      +            "type": "array"
      +          },
      +          {
      +            "$ref": "#/$defs/LocalizedText"
      +          },
      +          {
      +            "items": {
      +              "type": "array"
      +            },
      +            "type": "array"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "type": "array"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / $defs / Activity / properties / content_blocks / description
      Previous value: -"Interval rows; each row's values follow content_block_fields."New value: +"Workout steps as rows whose values follow content_block_fields; an interval's blocks value is its nested steps as rows in the same columns."
    • changedOutput schema / properties / content_block_fields / description
      Previous value: -"Column names of every content_blocks row."New value: +"Column names of every content_blocks row, nested blocks rows included."
  2. First observed

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, non-destructive safety, and the description adds real context beyond them: pagination is by whole weeks, page size limits results, and next_cursor fetches subsequent weeks. The remaining gap is that the actual page size and whether workouts span week boundaries partial aren't quantified.

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 tightly packed sentences with no filler, and the no-plan_id case is front-loaded ahead of the detail-returning case. Every clause carries information an agent needs, including the units note at the end.

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 an output schema exists, the description needn't explain return values, and it still covers mode selection, pagination, filtering, and units. Nothing an agent needs in order to call it correctly appears to be missing.

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 100%, so cursor, status, plan_id, and athlete_id are already documented in the schema, including that plan_id must come from this tool's own list. The description adds only the paging granularity (whole weeks) and the kilogram unit for session_kg_loads, which is useful but thin on top of a fully documented 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?

Names specific verbs and resources for both modes: list training plans (summaries, optional status) without plan_id, and read plan workouts with prescriptions plus matching activities with plan_id. The dual-mode split is stated up front, so an agent knows exactly which shape of result it gets from a given call.

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?

Clearly states the condition that selects each mode (present vs absent plan_id) and how to continue paging via next_cursor. It does not, however, contrast this tool with adjacent siblings such as get_group_plan, get_plan_draft, or get_training_status, so an agent must infer which plan-reading surface applies.

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