Skip to main content
Glama

list_activities

Read-onlyIdempotent

Retrieve Garmin activities by date range, newest first, with optional activity-type filtering. Use returned IDs to fetch detailed activity data.

Instructions

T6. List activities in a date range, newest first, optionally filtered by Garmin activity type key (e.g. running, cycling, indoor_cycling, lap_swimming, strength_training). Returns ids for get_activity. Results are informational, not medical advice. Fields Garmin did not record say 'not recorded'; never treat them as zero.

Input Schema

NameRequiredDescriptionDefault
endYesLast date, YYYY-MM-DD (inclusive); at most 90 days after start.
limitNoMaximum activities, 1-100.
startYesFirst date, YYYY-MM-DD (inclusive).
activity_typeNoOptional Garmin activity type key, e.g. 'running'.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the description doesn't need to repeat that. It instead adds genuinely non-obvious result behavior: newest-first ordering, and the crucial sentinel rule that unrecorded fields say 'not recorded' and must never be read as zero. The medical-advice disclaimer is boilerplate but sets expectations for informational 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?

Four dense sentences, front-loaded with what the tool does and its ordering, then the downstream id hand-off, then data caveats. The 'T6.' prefix is meaningless noise to a calling agent, and the medical-advice line is filler, but nothing else wastes space.

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?

With an output schema present, the description needn't explain return shape, and it correctly spends its words on usage and data-interpretation caveats instead. One gap: it omits the 90-day maximum span between start and end, which is a hard constraint an agent could violate, though the schema does document it.

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; the description earns an extra point by listing concrete example values for the otherwise unconstrained, enum-less activity_type string (running, cycling, indoor_cycling, lap_swimming, strength_training). That is meaningfully more than the schema's bare 'e.g. running'.

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 and resource ('List activities'), the scope (date range), ordering (newest first), and an optional filter with concrete activity-type keys. It also distinguishes itself from the sibling get_activity by declaring 'Returns ids for get_activity', so an agent knows this is the discovery step, not the detail step.

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?

The 'Returns ids for get_activity' clause gives explicit downstream routing: use this to enumerate, then call get_activity for full details. It also implies date-range filtering as the primary selection mechanism. It stops short of naming when *not* to use it (e.g. fetching a single known activity), but the context is otherwise clear.

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