Skip to main content
Glama

list_workouts

Read-onlyIdempotent

List workout sessions in a date range plus user-marked Rest Day, Sick Day, or Travel Day context. Day context is returned even when that date has no workout. Treat context labels as explanatory context, not workouts; Travel Day can coexist with training.

Use before get_workout to find a session ID, or to answer training-history questions. Each workout row includes ID, date, focus type, location, and session-level NSI with rating.

DATE RANGE: detailed listings read 90-day slices, with an explicit range limit of 3660 days. Aggregates have no date range limit.

ALL HISTORY: when the user asks for "all", "ever", or their full workout history, set all_history=true. The tool finds the earliest stored workout (respecting activity_type when supplied). For detailed listings, older history beyond 3660 days is reported but not listed. Aggregates cover all stored history.

OUTPUT BOUND: detailed listings emit at most 250 workouts. For totals, averages, minimums, maximums, or counts over any period, set aggregate plus field (except count), and optionally group_by. The aggregate mode reads all matching records in pages and returns only numeric summaries. Never add up a capped listing.

FILTERS: activity_type matches the stored workout focus type case-insensitively. exercise_name keeps only sessions containing that exercise in workout sets. Use activity_type for imported modalities such as Stair Stepper; use exercise_name for strength-history questions. Both filters may be combined.

INFER: default start_date to 7 days ago, end_date to today. User-specified dates or years are authoritative. Widen freely for the period the user actually requested.

SAVED WORKOUTS: set saved_workouts=true to list the user's reusable Saved Workouts library instead of completed workout history. Saved workout IDs are separate from workout session IDs.

Input Schema

NameRequiredDescriptionDefault
fieldNoNumeric session field to aggregate. Needed except when counting all sessions.
end_dateNoEnd of date range. Format: YYYY-MM-DD. Optional — defaults to today.
group_byNoGroup an aggregate by stored local day, month or year; omitted returns one total.
aggregateNoReturn a numeric summary instead of session rows; when omitted, detailed listing behavior is unchanged.
start_dateNoStart of date range. Format: YYYY-MM-DD. Optional — defaults to 7 days ago.
all_historyNoTrue starts at the earliest stored workout; aggregate mode includes unlimited history, while detailed output keeps its usual cap.
activity_typeNoStored workout focus type to match case-insensitively, for example Stair Stepper. Defaults to no activity-type filter.
exercise_nameNoExercise name that must appear in the workout sets, matched case-insensitively. Defaults to no exercise filter.
saved_workoutsNoWhen true, list reusable Saved Workouts instead of completed workout sessions. Defaults to false.

Output Schema

NameRequiredDescriptionDefault
resultYesHuman-readable result text returned by the tool.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • addedInput schema / properties / aggregate
      Added value: +{
      +  "description": "Return a numeric summary instead of session rows; when omitted, detailed listing behavior is unchanged.",
      +  "enum": [
      +    "sum",
      +    "avg",
      +    "min",
      +    "max",
      +    "count"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / all_history / description
      Previous value: -"Set true for all stored workout history instead of the recent default. Finds the earliest stored workout automatically; activity_type narrows that earliest-date lookup when present."New value: +"True starts at the earliest stored workout; aggregate mode includes unlimited history, while detailed output keeps its usual cap."
    • addedInput schema / properties / field
      Added value: +{
      +  "description": "Numeric session field to aggregate. Needed except when counting all sessions.",
      +  "enum": [
      +    "distance_mi",
      +    "duration_sec",
      +    "calories",
      +    "nsi",
      +    "rpe",
      +    "heart_points_moderate",
      +    "heart_points_peak"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / group_by
      Added value: +{
      +  "description": "Group an aggregate by stored local day, month or year; omitted returns one total.",
      +  "enum": [
      +    "day",
      +    "month",
      +    "year"
      +  ],
      +  "type": "string"
      +}
  2. Changed1 schema field changed
    • addedInput schema / properties / all_history
      Added value: +{
      +  "description": "Set true for all stored workout history instead of the recent default. Finds the earliest stored workout automatically; activity_type narrows that earliest-date lookup when present.",
      +  "type": "boolean"
      +}
  3. Changed2 schema fields changed
    • addedInput schema / properties / activity_type
      Added value: +{
      +  "description": "Stored workout focus type to match case-insensitively, for example Stair Stepper. Defaults to no activity-type filter.",
      +  "type": "string"
      +}
    • addedInput schema / properties / exercise_name
      Added value: +{
      +  "description": "Exercise name that must appear in the workout sets, matched case-insensitively. Defaults to no exercise filter.",
      +  "type": "string"
      +}
  4. Changed1 schema field changed
    • addedInput schema / properties / saved_workouts
      Added value: +{
      +  "description": "When true, list reusable Saved Workouts instead of completed workout sessions. Defaults to false.",
      +  "type": "boolean"
      +}
  5. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), yet the description adds substantial undisclosed behavior: 90-day read slices, a 3660-day range limit, a 250-row output cap, paginated aggregate reads, and the rule that older history is reported but not listed. These are the operationally critical limits an agent must know.

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?

Long but sectioned with front-loaded headers (DATE RANGE, ALL HISTORY, OUTPUT BOUND, FILTERS, INFER, SAVED WORKOUTS), so an agent can scan to the relevant rule. Minor redundancy where INFER repeats the schema's default date values, but nearly every sentence carries actionable behavior.

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 9-parameter tool with an output schema, the description covers everything an agent needs to call it correctly: mode selection, range/cap limits, filter semantics, context-label interpretation, and the distinction between saved-workout IDs and session IDs. Nothing material is missing.

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 3 baseline applies to raw parameter definitions, but the description adds inter-parameter logic the schema lacks: aggregate requires field except for count, group_by is optional alongside it, and the two filters may be combined. The INFER section largely restates schema defaults, which caps it below 5.

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+resource ('List workout sessions in a date range') and immediately expands scope to Rest/Sick/Travel Day context. It distinguishes itself from get_workout ('Use before get_workout to find a session ID') and from its own saved_workouts mode, so an agent can tell it apart from siblings without opening a 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?

Explicit when-to-use (before get_workout, for training-history questions) plus mode-selection rules for all_history, aggregate+field, and saved_workouts. It also gives a clear when-NOT: 'Never add up a capped listing,' routing totals to aggregate mode instead.

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.