Skip to main content
Glama
garmin-personal-api-mcp

garmin-personal-api-mcp

by aaronhaddad

VO2 max, training effect & recovery

garmin_get_performance_metrics
Read-onlyIdempotent

Read Garmin VO2 max, aerobic and anaerobic training effect, recovery time, and performance condition from .FIT files to track fitness trends and workout load.

Instructions

Garmin's own VO2 max, read the way Garmin Connect shows it, plus per-activity aerobic/anaerobic training effect, recovery time and performance condition. Decoded from the original .FIT files, since the Personal API has no VO2 max endpoint.

Returns the current VO2 max (whole number, as Garmin's apps round it, plus the precise value), every new VO2 max reading in the window (Garmin only updates it on qualifying runs and power-meter rides), and a row per activity.

Examples:

  • "what's my VO2 max?" / "how is my VO2 max trending?" -> last_n=20

  • "how hard was today's workout, how long to recover?" -> last_n=1 Each activity costs one file download, so keep last_n small unless a trend is asked for.

Input Schema

NameRequiredDescriptionDefault
last_nNoHow many recent activities to scan (all types)
activity_idNoOne activity, from garmin_list_activities. Omit to scan recent activities
activity_typeNoOnly this Garmin type key, e.g. running, cycling
response_formatNo'markdown' for a readable summary, 'json' for every fieldmarkdown

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv1.2.0

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already cover read-only/idempotent safety, but the description adds substantial extra context: data is decoded from original .FIT files because the Personal API has no VO2 max endpoint, each activity costs one file download, and Garmin only updates VO2 max on qualifying runs and power-meter rides. That is exactly the cost and data-freshness information an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads what the tool returns, then the data-source rationale, then two compact intent-to-parameter examples and a cost caveat. Every sentence carries information an agent would otherwise have to guess.

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?

Though there is no output schema, the description enumerates the returned fields (rounded and precise VO2 max, new readings, per-activity rows) and explains the cost model and update cadence. Nothing essential for correct invocation appears 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 baseline is 3; the description adds real meaning by tying last_n to per-activity file-download cost and recommending small values, which the schema does not convey. It says less about activity_type and response_format, but those are already documented in 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?

States precisely what it returns: current VO2 max (rounded plus precise value), new VO2 max readings in the window, and per-activity aerobic/anaerobic training effect, recovery time and performance condition. This clearly separates it from siblings like garmin_get_fitness_age and garmin_get_activity, which do not expose these metrics.

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?

Maps natural-language intents to concrete parameters ("what's my VO2 max?" -> last_n=20, "how hard was today's workout?" -> last_n=1) and warns to keep last_n small unless a trend is requested. It does not explicitly say when to prefer garmin_get_activity over this tool, which keeps it from a 5.

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