Skip to main content
Glama

Povver — Strength Training

Exercise Progress

get_exercise_progress
Read-only

Get 8-week progress for a specific exercise: weekly e1RM trend, personal records, plateau detection, last session details, and strength_state — the trend STATE (progressing / holding / stalling / deloading / insufficient_data) classified over the 6-week window stated in its window_weeks, the same signal shown on the iOS lift detail page. Prefer strength_state over raw weekly points when judging whether a lift is improving. For the per-lift % gain ("+59%") and the 8-week state, use get_strength_climb — its constituents carry indexed_pct and their own window_weeks; the two states can differ for one lift because the windows differ, so quote the window with the state. Use when the user asks about a specific lift (e.g., "am I getting stronger on bench press?" or "have I plateaued on squats?"). Pass EITHER exercise_id (exact — from search_exercises or a prior resolution.candidates) OR exercise (a name, fuzzy-matched against the user's history). Prefer exercise_id when you have it: a fuzzy NAME can match several variants the user trains (e.g. "Incline Bench Press" → dumbbell vs machine), and the response's resolution block reports which id was chosen, whether it was ambiguous, and the candidates — if ambiguous, re-query with the exact exercise_id you meant. For muscle-group-level interpreted analysis (fatigue, plateau, effective volume), use get_muscle_state. For raw time-series data, use get_muscle_group_progress. Weekly points come from the exercise series (data_quality.source: precomputed_series); hard_sets is the week's hard-set credit and may be fractional; bests holds all-time bests (holds, carries, pace, exact vs estimated e1RM, reps at load, never mixed across load kinds); line lists each member of the progression line with its own bests; a line.trend, when present, is the line's merged strength state as the analyst classified it (max per week across members, exact and estimated e1RM never mixed, basis says which; null = not classified yet), and without it there is no merged trend across members.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
weeksNoNumber of weeks
exerciseNoExercise name (fuzzy matched against training history). Prefer exercise_id when known.
exercise_idNoExact catalog exercise_id (from search_exercises, list_trained_exercises, or a prior resolution.candidates) — avoids fuzzy-match ambiguity.
exercise_idsNoBatch: up to 10 exact exercise_ids (e.g. from list_trained_exercises). Returns a results[] array of per-exercise summaries in one call instead of surveying lifts one at a time. Takes precedence over exercise/exercise_id when provided.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
dataNo
metaNo
batchNo
countNo
resultsNo
successNo
truncatedNo
next_cursorNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.5/5.0
Behavior4/5

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

Annotations only supply readOnlyHint and openWorldHint, so the description carries real weight and delivers: strength_state is classified over a 6-week window defined by window_weeks, data provenance is precomputed_series, hard_sets may be fractional, and the response's resolution block reports ambiguity. Much of the remaining text is return-field semantics rather than operational behavior, which is why this is not a 5.

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 opening sentence is well front-loaded, but the body is a dense run-on that mixes routing guidance, parameter selection, and detailed output-field semantics (bests, line, line.trend, basis) into one block. Since an output schema exists, the extended return-field exposition is partly redundant and inflates length.

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 complex analytics tool with 4 parameters, an output schema, and several near-neighbor siblings, the description covers triggers, exclusions, selector tradeoffs, ambiguity recovery, and the meaning of the headline strength_state signal. An agent has everything needed to select and call it correctly.

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 coverage is 100% so the baseline is 3, but the description adds genuine decision guidance: pass EITHER exercise_id (exact) OR exercise (fuzzy), prefer exercise_id because a name can match several trained variants, and re-query with the exact id when resolution reports ambiguous. It also states exercise_ids precedence over the other two selectors.

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?

Opens with a specific verb and resource ("Get 8-week progress for a specific exercise") and enumerates the concrete outputs it returns: weekly e1RM trend, PRs, plateau detection, last session, strength_state. It explicitly contrasts itself against three siblings (get_strength_climb, get_muscle_state, get_muscle_group_progress), so an agent can route without opening any schema.

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 trigger ("Use when the user asks about a specific lift") with two concrete example utterances, plus when-not guidance routing to get_strength_climb for % gain/8-week state, get_muscle_state for muscle-group analysis, and get_muscle_group_progress for raw time-series. It even explains why the two strength states can differ (differing windows).

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.