Skip to main content
Glama

Move a draft workout

move_draft_workout
Destructive

Move everything scheduled on one day of the cached plan draft to another day; if the destination day is occupied the two days swap. Draft-only: changes the cached preview and nothing the athlete sees. Returns the refreshed plan; content_preview holds whole weeks from the first changed week and next_cursor continues in get_plan_draft. Only the account that created the draft can edit it.

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>",
      "draft_id": "<draft_id>",
      "from_week": "<from_week>",
      "from_day": "<from_day>",
      "to_week": "<to_week>",
      "to_day": "<to_day>"
    },
    "name": "move_draft_workout"
  }
}

Input Schema

NameRequiredDescriptionDefault
to_dayYesDay of the week; abbreviations such as 'Sat' and 1-7 (Monday=1) work.
to_weekYesPlan week number, starting at 1.
draft_idYesdraft_id from create_training_plan or a draft edit by this account (single-use, expires 24 hours after drafting).
from_dayYesDay of the week; abbreviations such as 'Sat' and 1-7 (Monday=1) work.
from_weekYesPlan week number, starting at 1.
athlete_idYesThe draft's owner: the athlete for an individual draft; for a group draft, the coach's own id from get_current_user.

Output Schema

NameRequiredDescriptionDefault
goalNo
draftNo
errorNo
levelNo
weeksNo
statusNo
messageNo
privacyNoPresent when the athlete's settings withhold data.
draft_idNo
group_idNo
retry_atNoEpoch milliseconds; an uncharged allowance-limited job resumes on a poll at or after this instant.
warningsNo
next_stepNoWhat can be done next, for example after a failure.
operationNo
plan_nameNo
athlete_idNo
expires_atNo
group_nameNo
next_stepsNo
assumptionsNo
athlete_pbsNo
goal_sourceNo
next_cursorNoReads the next page; null on the last page.
reason_codeNo
total_weeksNo
member_countNo
retry_at_isoNoThe epoch field beside it as a UTC instant; the local day can differ.
subject_kindNo
user_contentNoFields in this result that people wrote.
changed_cellsNo
phase_outlineNo
expires_at_isoNoThe epoch field beside it as a UTC instant; the local day can differ.
missing_inputsNo
weeks_returnedNo
content_previewNo
generation_stateNoqueued, generating, ready, failed or access_revoked; only ready content is editable/saveable.
truncated_fieldsNoLists cut to fit one response: rows returned and total.
allowance_chargedNoAudit of the stable Redis reservation; retries of this job do not charge again.
duration_in_weeksNo
generated_contentNoFields in this result that NexRex's AI wrote.
weekly_mileage_kmNo
workout_preferenceNo
preferences_appliedNo
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.
recommended_start_dateNo
training_principle_org_idNo
training_principle_sourceNo

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/5.0
Behavior5/5

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

Beyond the annotations (readOnly=false, destructiveHint=true, idempotent=false), the description discloses the key behavior that the destination-occupied case swaps the two days rather than overwriting. It also states the blast radius (cached preview only, nothing the athlete sees) and the authorization constraint that only the draft's creating account can edit it.

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?

It is compact and front-loaded: the core move-and-swap behavior comes first, followed by the draft-only scope, then return shape and auth. The middle clauses are dense but each carries a distinct fact; minor tightening is possible but nothing is redundant.

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 mutation tool that is destructive and non-idempotent, the description covers behavior, side effects, authorization, and what the response contains (refreshed plan, content_preview spanning whole weeks from the first changed week, next_cursor continuation). An output schema exists, so the return-value detail is a bonus rather than a gap.

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 week numbers, the day enum with abbreviation support, and the draft_id/athlete_id semantics are already documented in the schema. The description adds no parameter-level detail beyond that, which is the expected baseline when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Move everything scheduled on one day of the cached plan draft to another day') and specifies the bulk, day-granular scope plus the swap fallback. That operation is clearly distinct from a per-workout edit, but no sibling (e.g. edit_draft_workout) is named to make the boundary explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied through scope language ('Draft-only: changes the cached preview and nothing the athlete sees') and the swap rule, which tells the agent what happens when the target day is taken. There is no explicit statement of when to choose this over edit_draft_workout or the proposal tools, so the agent must infer the boundary.

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