Skip to main content
Glama

Povver — Strength Training

Log Workout

log_workout
DestructiveIdempotent

Record or correct FINISHED workouts; both actions take workouts. action: create (1-25 workouts, each with client_ref, end_time, exercises and sets; client_ref makes a retry safe; is_final=true on the last chunk of an import) · update (one item: workout_id + only the fields to change; exercises REPLACES the list, so read_workouts(detail) first and echo each set id). An unknown exercise_id comes back with candidates. The session in progress: live_workout. Import rules: povver://guide/tools.

Input Schema

NameRequiredDescriptionDefault
actionYes
is_finalNocreate: the last chunk of an import.
workoutsYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / workouts / items / properties / exercises / items / properties / superset_id / description
      Previous value: -"Shared by a superset (2) or circuit (3-8). Omit keeps it; null takes it out."New value: +"Superset (2) or circuit (3-8) id; null takes it out."
  2. Changed27 schema fields changed
    • changedInput schema / properties / is_final / description
      Previous value: -"create: true on the last chunk of an import."New value: +"create: the last chunk of an import."
    • removedInput schema / properties / workouts / description
      Removed value: -"create: 1-25 new workouts. update: one item, workout_id + only the fields to change."
    • changedInput schema / properties / workouts / items / properties / client_ref / description
      Previous value: -"create: stable key from your source; reuse it on a retry."New value: +"create: stable key from your source."
    • changedInput schema / properties / workouts / items / properties / exercises / items / properties / exercise_id / description
      Previous value: -"From exercises(search). Omit only with new_exercise."New value: +"From exercises(search). Omit only when sending new_exercise."
    • addedInput schema / properties / workouts / items / properties / exercises / items / properties / measure / description
      Added value: +"reps (default), duration (duration_s) or distance (distance_m). Omit keeps it."
    • changedInput schema / properties / workouts / items / properties / exercises / items / properties / new_exercise / additionalProperties
      Previous value: -falseNew value: +{}
    • changedInput schema / properties / workouts / items / properties / exercises / items / properties / new_exercise / description
      Previous value: -"Only for a lift not in the catalog (see povver://guide/tools)."New value: +"Same as save_plan exercises[].new_exercise: a lift not in the catalog, instead of exercise_id."
    • removedInput schema / properties / workouts / items / properties / exercises / items / properties / new_exercise / properties / activity
      Removed value: -{
      -  "enum": [
      -    "strength",
      -    "cardio"
      -  ],
      -  "type": "string"
      -}
    • removedInput schema / properties / workouts / items / properties / exercises / items / properties / new_exercise / properties / bodyweight_fraction
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "const": 0.95,
      -      "type": "number"
      -    },
      -    {
      -      "const": 0.64,
      -      "type": "number"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ]
      -}
    • removedInput schema / properties / workouts / items / properties / exercises / items / properties / new_exercise / properties / equipment
      Removed value: -{
      -  "items": {
      -    "maxLength": 40,
      -    "type": "string"
      -  },
      -  "maxItems": 3,
      -  "type": "array"
      -}
    • removedInput schema / properties / workouts / items / properties / exercises / items / properties / new_exercise / properties / groups
      Removed value: -{
      -  "items": {
      -    "maxLength": 40,
      -    "type": "string"
      -  },
      -  "maxItems": 3,
      -  "minItems": 1,
      -  "type": "array"
      -}
    • removedInput schema / properties / workouts / items / properties / exercises / items / properties / new_exercise / properties / load_kind
      Removed value: -{
      -  "enum": [
      -    "external",
      -    "bodyweight",
      -    "none"
      -  ],
      -  "type": "string"
      -}
    • removedInput schema / properties / workouts / items / properties / exercises / items / properties / new_exercise / properties / measures
      Removed value: -{
      -  "items": {
      -    "enum": [
      -      "reps",
      -      "duration",
      -      "distance"
      -    ],
      -    "type": "string"
      -  },
      -  "maxItems": 3,
      -  "minItems": 1,
      -  "type": "array"
      -}
    • removedInput schema / properties / workouts / items / properties / exercises / items / properties / new_exercise / properties / name
      Removed value: -{
      -  "maxLength": 400,
      -  "type": "string"
      -}
    • removedInput schema / properties / workouts / items / properties / exercises / items / properties / new_exercise / properties / unilateral
      Removed value: -{
      -  "const": false,
      -  "type": "boolean"
      -}
    • removedInput schema / properties / workouts / items / properties / exercises / items / properties / new_exercise / required
      Removed value: -[
      -  "name",
      -  "load_kind",
      -  "measures"
      -]
    • addedInput schema / properties / workouts / items / properties / exercises / items / properties / sets / items / properties / assist_kg / description
      Added value: +"Assistance; never a negative weight_kg."
    • changedInput schema / properties / workouts / items / properties / exercises / items / properties / sets / items / properties / id / description
      Previous value: -"update: the set id from read_workouts(detail); echo it to keep fields you omit. Omit for a new set."New value: +"update: echo the id from read_workouts(detail)."
    • changedInput schema / properties / workouts / items / properties / exercises / items / properties / sets / items / properties / load_basis / description
      Previous value: -"Dumbbell weight per_implement or total. Omit unless the user said."New value: +"Dumbbell weight per_implement or total; only if the user said."
    • changedInput schema / properties / workouts / items / properties / exercises / items / properties / sets / items / properties / reps / description
      Previous value: -"Reps (0 for timed/distance work or a missed attempt with is_failure)."New value: +"0 for timed/distance work or a missed attempt (is_failure)."
    • removedInput schema / properties / workouts / items / properties / exercises / items / properties / sets / items / properties / rir / description
      Removed value: -"Integer reps in reserve. Send rir OR rpe."
    • removedInput schema / properties / workouts / items / properties / exercises / items / properties / sets / items / properties / type / description
      Removed value: -"\"working set\" or \"warmup\"."
    • addedInput schema / properties / workouts / items / properties / exercises / items / properties / sets / items / properties / type / enum
      Added value: +[
      +  "working",
      +  "warmup",
      +  "dropset"
      +]
    • removedInput schema / properties / workouts / items / properties / exercises / items / properties / sets / items / properties / type / maxLength
      Removed value: -40
    • changedInput schema / properties / workouts / items / properties / exercises / items / properties / sets / items / properties / weight_kg / description
      Previous value: -"kg; null/0 bodyweight. Assistance is assist_kg."New value: +"null or 0 = bodyweight."
    • changedInput schema / properties / workouts / items / properties / exercises / items / properties / superset_id / description
      Previous value: -"Group id: exercises sharing it are a superset (2) or circuit (3+), placed next to each other, max 8. Omit keeps the stored group; null takes it out."New value: +"Shared by a superset (2) or circuit (3-8). Omit keeps it; null takes it out."
    • changedInput schema / properties / workouts / items / properties / supersets / description
      Previous value: -"Group settings: {id, rest_between_s 5-300 or null, rest_after_round_s 15-900 or null, auto_run (only when every member is timed)}. Omit keeps them; null clears."New value: +"Rest per superset_id; auto_run only if all members are timed. Omit keeps; null clears."
  3. Added

TDQS

A4.7/5.0
Behavior5/5

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

Annotations declare destructiveHint=true and idempotentHint=true, and the description explains the mechanisms behind both: 'exercises REPLACES the list' (what gets destroyed) and 'client_ref makes a retry safe' (why retries are safe). It also discloses the error path — an unknown exercise_id returns candidates — which is valuable recovery behavior.

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?

Highly compressed and front-loaded: scope first, then create, then update, then the live_workout alternative, then a guide pointer. The dense bullet style is efficient, though a few fragments (e.g. the bare guide URI) are terse enough to slow comprehension.

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?

For a 3-param, deeply nested mutation with no output schema, the description covers action branching, idempotency keys, replacement semantics and an error path, deferring import details to a guide. It stops short of describing the success response or how supersets interact with deletion, which is a minor gap rather than a blocking one.

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 only 33% schema description coverage, the description carries real weight: it documents create bounds (1-25 workouts, client_ref, end_time, exercises and sets), is_final on the last chunk, and update semantics (workout_id plus only changed fields). It does not explain supersets, import_id chunking consistency, or the positional/measure fields, so it is strong but not complete.

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?

States a specific verb pair and resource plus the scope restriction: 'Record or correct FINISHED workouts'. The word FINISHED immediately separates it from the in-progress sibling, and it then names live_workout explicitly for that case.

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 explicit routing: create vs update, when to use live_workout instead, and the prerequisite step 'read_workouts(detail) first and echo each set id'. It also points to exercises(search) for exercise_id and to an external guide for import rules.

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.