Skip to main content
Glama

save_routine

Use this when the user wants a new workout routine saved to their Reps account ("build me a 60-minute push routine and save it"). This writes straight away: first describe the routine to the user in plain words (its name and each exercise with sets, reps and weight) and wait for an explicit yes in this conversation. A routine is a reusable template, not a log of a finished workout. Reference exercises by exercise_slug or exercise_id from get_exercise_library; one the library does not have is refused with candidates: retry with one only when it is clearly what the user meant, otherwise ask. target_reps is a rep count; for a timed hold or cardio (plank, wall sit, rowing) leave it out and give the time per set in target_duration_seconds (45 for "45 s"). rest_seconds may be 0 (a superset). The result lists what was saved by name. The routine shows up in the Reps app after its next sync (up to 5 minutes) or when the app is reopened; say so.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameYes
exercisesYes
estimated_duration_minutesNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
okYes
nameYes
exercisesYes
created_atYes
routine_idYes
exercise_countYes
visible_in_appYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • addedInput schema / properties / exercises / items / properties / target_duration_seconds
      Added value: +{
      +  "type": "number"
      +}
    • addedOutput schema / properties / exercises / items / properties / target_duration_seconds
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • changedOutput schema / properties / exercises / items / required
      Previous value: -[
      -  "name",
      -  "slug",
      -  "sets",
      -  "target_reps",
      -  "target_weight_kg"
      -]New value: +[
      +  "name",
      +  "slug",
      +  "sets",
      +  "target_reps",
      +  "target_weight_kg",
      +  "target_duration_seconds"
      +]
  2. First observed

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only cover the generic write profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false); the description adds the operationally important facts: it writes immediately, it requires an explicit in-conversation confirmation, unknown exercises are refused with `candidates`, and the routine will not appear in the app for up to ~5 minutes or until the app is reopened. That is exactly the behavioral context structured fields cannot express.

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?

Front-loaded with the trigger, then the confirmation requirement, then parameter semantics — the priority ordering is right and every clause carries information. It runs long for a 3-parameter tool, and 'The result lists what was saved by name' is partly redundant given an output schema exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the write flow, confirmation gate, identifier validation, timing-vs-reps semantics, and the async sync caveat, which is more than enough for an agent to call it correctly. Two minor gaps remain: the meaning of `estimated_duration_minutes`, and no explicit handoff naming edit_routine for modifying an existing routine.

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 description coverage is 0%, so the description carries the full load and does most of it well: it explains exercise_slug/exercise_id sourcing from get_exercise_library, the target_reps vs target_duration_seconds split with a worked example (45 for '45 s'), and that rest_seconds may be 0 for a superset. Only `notes` and `estimated_duration_minutes` go unexplained, which keeps it short of a 5.

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?

States a specific verb and resource ('save a new workout routine to their Reps account') and separates it from the finished-workout logging case ('a routine is a reusable template, not a log of a finished workout'). It implicitly distinguishes itself from edit_routine via the word 'new', but it never explicitly contrasts itself with the similarly-named sibling save_plan, so an agent must infer that boundary.

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?

Gives an explicit when-to-use trigger with a concrete user utterance ('build me a 60-minute push routine and save it'), an explicit prerequisite (describe it, then wait for an explicit yes), and an explicit retry/abandon policy when an exercise slug is refused (retry only when it is clearly what the user meant, otherwise ask). Nothing is left to inference.

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