Skip to main content
Glama

Activity analysis (splits, laps, best efforts)

get_activity_analysis
Read-onlyIdempotent

Analyze one Garmin activity for per-km/mile splits, laps, best efforts, HR-zone time and first-vs-second-half drift. Use it to check negative splits, fastest segments or heart-rate drift.

Instructions

Per-km or per-mile splits, the watch's laps / workout reps, best efforts, time in HR zones and first-vs-second-half drift for ONE recorded activity, computed from Garmin's original FIT file. Use for 'my km splits', 'did I negative split', 'fastest 5 km in this run', 'how long in zone 2', 'did my HR drift'. splits: one row per km/mile (time, pace, cumulative time, avg/max HR, cadence, power, elevation gain/loss), timer time so pauses don't count, final partial split labelled with its distance. laps: the watch's own laps with intensity (warmup/active/cooldown/rest) and trigger (manual, distance, ...). best_efforts: fastest continuous 1 km, 1 mile, 5 km, 10 km, half and marathon the activity is long enough for, with where each started. hr_zones: time in each of the user's HR zones. drift: first vs second half pace, HR and aerobic decoupling. Get the ID from search_activities. Manual entries and GPX/TCX imports return a short 'unavailable' note.

Input Schema

NameRequiredDescriptionDefault
unitNoSplit length and pace unit. Defaults to the user's Garmin unit setting.
includeNoSections to return. Drop ones the question doesn't need for a shorter answer.
activity_idYesGarmin activity ID, from search_activities.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare this a read-only, idempotent, non-destructive operation, so the description is free to spend its words on behavior that matters: timer time excludes pauses, the final partial split is labelled with its distance, best efforts only appear for distances the activity is long enough for, and manual/GPX/TCX entries return a short 'unavailable' note. That last point is a valuable pre-call warning about a silent failure mode an agent would otherwise misread as empty data.

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?

It is front-loaded with the one-line summary and the use-case list, then organized as a compact glossary of the five sections, so it is scannable rather than rambling. The section glossary runs long, but each entry carries distinct information an agent cannot get from the schema alone.

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?

With no output schema, the description carries the return-value burden and does so by describing the row shape of splits and the contents of laps, best_efforts, hr_zones and drift. Combined with the ID source and the unavailable-note caveat, an agent has everything needed to call this correctly and interpret the result.

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 schema already documents unit, include and activity_id; the description nonetheless explains what each includable section actually contains (per-km rows with pace, cumulative time, avg/max HR, cadence, power, elevation), which the schema's terse 'Sections to return' does not. It does not restate the default include set or the unit default, leaving that to the schema.

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 description names a specific verb-and-resource pair ('per-km or per-mile splits, laps, best efforts, HR zones, drift for ONE recorded activity') and scopes it to a single activity, which cleanly separates it from summarize_activities, compare_activities and get_activity. It also states the data provenance ('computed from Garmin's original FIT file'), so the agent knows this is derived analysis rather than a raw record fetch.

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?

Concrete user phrasings ('did I negative split', 'how long in zone 2', 'did my HR drift') give an agent strong signal for when to reach for it, and the prerequisite is spelled out: 'Get the ID from search_activities.' It stops short of naming the sibling to use instead for cross-activity or whole-activity comparisons, so routing in ambiguous cases still requires inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.