Skip to main content
Glama

Nolio

Read a completed workout

get_training
Read-only

Read one completed workout or race in full: duration, distance, load, heart rate, power, the athlete's debrief, and on request its laps and its sensor curves.

id: the trn_… (workout) or cmp_… (race) handle of a row returned by get_calendar(mode='real'). athlete: the managed athlete's usr_… handle when the workout is not yours. laps: add every lap, the ones recorded by the device first, then the ones drawn in Nolio, each with its stats as {value, unit}. When the connector's terms withhold them, only the laps drawn in Nolio come, with null stats, and laps_restriction says why. streams: the sensor curves to add, among heartrate, watts, cadence, torque, pace (a speed in m/s), altitude, distance, or the key of another curve of the file. time (seconds from the start) always comes with them, units gives each curve's unit. Ask only for the curves the question needs; a file-less workout returns available: false. Each curve is sampled evenly to max_points (default 600), every_nth_sample says the step; max_points can go higher, within 6000 points across the curves requested (time aside). from_index / to_index keep one window of samples, both included: a lap's start_index and end_index give exactly that lap. The response then carries from_index: point i of a curve is sample from_index + i * every_nth_sample. Files often hold more curves than these seven: ground contact time, vertical oscillation and ratio, stride length, running form power and leg stiffness, breathing rate, muscle oxygen (SmO2, THb), core and skin temperature, glucose, pedal smoothness and torque effectiveness, gears, stroke rate. Their keys vary by device: whenever you request a curve, other_streams lists the ones this file holds (key, name, unit); request them by key. A requested curve the file does not hold comes back in unknown_streams.

Input Schema

NameRequiredDescriptionDefault
idYes
lapsNo
athleteNo
streamsNo
to_indexNo
from_indexNo
max_pointsNo

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.7/5.0
Behavior5/5

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

With readOnlyHint already declared, the description still adds substantial behavioral context unobtainable elsewhere: connector terms may withhold device laps, in which case only Nolio-drawn laps arrive with null stats and laps_restriction explains why; file-less workouts return available: false; unheld curves surface in unknown_streams. This is exactly the kind of edge-case disclosure annotations cannot carry.

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?

Purpose is front-loaded before any parameter talk, and nearly every sentence carries operational detail. It is long and the exhaustive roster of device-specific curve types is the one passage that could be compressed without losing call-relevant information.

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 seven-parameter read tool with rich optional payloads, the description covers id provenance, optionality, sampling math, windowing semantics, and failure modes. With an output schema present the description did not need to explain return values, yet the returned-field references (laps_restriction, other_streams, unknown_streams, every_nth_sample) are precisely the ones an agent needs to interpret a call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry all semantic weight, and it does: id is the trn_/cmp_ handle, athlete is the usr_ handle for managed athletes, laps toggles device-then-Nolio lap inclusion, streams enumerates valid curve keys, max_points has a default and a 6000-point aggregate cap, and from_index/to_index are inclusive windows tied to a lap's start_index/end_index. Every parameter gets meaning the bare schema lacks.

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?

The first sentence names a specific verb and resource (read one completed workout or race) and enumerates the exact payload it returns: duration, distance, load, heart rate, power, debrief, plus optional laps and sensor curves. That scope cleanly separates it from siblings like get_planned_training, review_training, and get_calendar.

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

Usage Guidelines4/5

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

It routes the agent to a specific sibling for the id ('a row returned by get_calendar(mode=\'real\')') and gives an explicit efficiency rule ('Ask only for the curves the question needs'). It does not, however, say when to prefer review_training or get_records over this tool, so there is no explicit exclusion set.

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