Skip to main content
Glama
OwenScheuer

Paceva for Garmin

by OwenScheuer

Paceva for Garmin

Ask Claude or any MCP app about your own Garmin data: sleep, HRV, Body Battery, stress, resting heart rate, steps and activities.

"How did I sleep last night?" "Is my HRV trending down this month?" "Compare my last three long runs." "What could I run a half marathon in right now?"

Free, open source and local. It runs on your computer with your own Garmin Personal API key. Your data goes from Garmin to your computer to your AI app, and never through anyone else's server. It's read-only: it can't change anything in Garmin Connect.

Set up

Claude Desktop: one download

  1. Download paceva-garmin.mcpb and open it.

  2. Claude asks for your Garmin key: open Garmin Connect › Personal API Key, select Create Key, copy it, paste it in.

  3. Ask Claude: "How did I sleep last night?"

Everything else: one command

Needs Node.js 20 or newer. In a terminal:

npx github:OwenScheuer/paceva-garmin-mcp

It opens Garmin for you, picks up the key once you've copied it, checks it with Garmin, and adds itself to Claude Desktop, Claude Code, Cursor and Windsurf, whichever you have. Restart the app and ask away.

For any other MCP app, add this to its MCP servers:

"garmin": { "command": "npx", "args": ["-y", "github:OwenScheuer/paceva-garmin-mcp"] }

ChatGPT only connects to servers on the internet, not ones on your computer, so it can't use this yet.

New key later? npx github:OwenScheuer/paceva-garmin-mcp --new-key. Check it's working: npx github:OwenScheuer/paceva-garmin-mcp check.

Related MCP server: garmin-owl

What it can read

Tool

What it gives your AI

get_daily_overview

One day at a glance: summary, sleep, HRV and Body Battery

get_daily_summaries

Steps, calories, resting HR, stress and intensity minutes per day

get_sleep

One night in detail, or nightly summaries over a range

get_hrv

Overnight HRV, baseline and status

get_body_battery

Charged, drained, high and low

get_stress · get_steps · get_heart_rate · get_spo2

Daily stress, steps, heart rate and Pulse Ox

get_training_log

Every activity in a period (up to a year) with Garmin's main fields: distance, time, speed, heart rate, power, TSS, fastest splits, time in zones

list_activities · get_activity

Your activities, and any one in full

get_profile

Profile settings and heart rate zones

get_weight · get_fitness_age · get_hydration · get_food_log · get_menstrual_cycle

The rest of what Garmin's Personal API offers

Just Garmin's data. No scores, models or advice are added: every number is Garmin's, in Garmin's own field names and units. Ask "what could I run a 10K in?" and any prediction is your AI's own, made from that data.

Ranges are capped at 92 days per call (a year for the training log). Minute-by-minute series (heart rate through the day, sleep stages) come back as a count, min, max and average unless your AI asks for the full series.

Garmin's Personal API doesn't include training readiness, training status or recovery time, so neither does this.

Your key and your privacy

  • Your key is saved to ~/.config/garmin/connect-personal-api-key, the same place Garmin's own tools look, readable only by you. You can also set GARMIN_PERSONAL_API_KEY instead.

  • The short-lived access token Garmin issues is cached in ~/.config/paceva-garmin/token.json, also readable only by you.

  • The data your AI app reads is sent to that app's provider (for example Anthropic or OpenAI) as part of your chat, under their privacy terms.

  • To revoke access, delete the key in Garmin Connect.

Garmin's Personal API is for your own data. Each person uses their own key; please don't build a service that collects other people's keys.

Troubleshooting

  • "Garmin didn't accept your Personal API key": it expired or was deleted. Run npx github:OwenScheuer/paceva-garmin-mcp --new-key. (For the Claude Desktop extension, update the key in Settings › Extensions.)

  • "No Garmin Personal API key found": run npx github:OwenScheuer/paceva-garmin-mcp in a terminal.

  • "Garmin is rate-limiting requests": wait a minute and ask again.

Development

npm install
npm test
npm run build
./scripts/pack-mcpb.sh   # builds paceva-garmin.mcpb

Not affiliated with or endorsed by Garmin. Garmin and Garmin Connect are trademarks of Garmin Ltd. or its subsidiaries.

MIT licensed. Made by Paceva.

Available Tools

18 tools
get_activityActivity detailsA
Read-onlyIdempotent

One activity in full: summary, laps or splits where available, and with include_workouts the structured workout it followed.

NameRequiredDescriptionDefault
activity_idYesThe activityId from list_activities.
include_workoutsNoAlso fetch the structured workout, if any.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint), so the description's job is lighter. It adds useful behavioral detail like conditional availability ('laps or splits where available') and the side effect of include_workouts, but says nothing about behavior for missing/invalid activity IDs.

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?

A single front-loaded sentence with no filler; the scope ('one activity in full') comes first and the optional-workout condition is appended compactly. Every clause carries information.

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 no output schema, the description usefully signals the return shape (summary, laps/splits, workout), and the 2-parameter schema is fully documented. Only error/not-found behavior is unaddressed, which is minor for a read-only lookup tool.

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

Parameters3/5

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

Schema coverage is 100% and both parameters are already documented, including the activity_id cross-reference to list_activities. The description's mention of include_workouts only restates the schema's 'Also fetch the structured workout, if any' in slightly different words, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource (one activity) and explicitly enumerates what is returned: summary, laps/splits where available, and optionally the structured workout. This clearly distinguishes it from the sibling list_activities, though it never names that sibling directly.

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

Usage Guidelines3/5

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

Usage is only implied: 'One activity in full' hints that this is the detail counterpart to a list call, and the include_workouts clause implies when to enable it. No explicit when-to-use, when-not, or named alternative is given.

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

get_body_batteryBody BatteryA
Read-onlyIdempotent

Garmin Body Battery per day: charged, drained, highest and lowest, for one day or a range.

NameRequiredDescriptionDefault
end_dateNoLast day, YYYY-MM-DD, inclusive. Defaults to today.
start_dateNoCalendar date, YYYY-MM-DD. Defaults to today.
include_seriesNoInclude minute-by-minute series. Off by default: long series come back as count, min, max and average.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description usefully states which values come back, but says nothing about external-API auth, rate limits, or data-availability behaviour (openWorldHint implies an external Garmin service where those matter).

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?

A single sentence with the resource and returned fields front-loaded; every clause (metrics, scope) carries information and there is no filler.

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 3 fully documented, all-optional parameters and no output schema, the description gives enough to call the tool and know what it returns. Minor gaps remain: no hint about default behaviour or whether a missing day yields an empty result.

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

Parameters3/5

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

Schema description coverage is 100%, so date formats, inclusivity and the include_series summary/fallback behaviour are all documented in the schema. The description's 'one day or a range' adds only a light framing of how start_date/end_date interact, which is baseline value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete resource (Garmin Body Battery) and enumerates the exact metrics returned (charged, drained, highest, lowest), plus the temporal scope (one day or a range). The metric name alone distinguishes it from siblings like get_stress or get_hrv, though it never explicitly says so.

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

Usage Guidelines3/5

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

The phrase 'for one day or a range' implies the two calling modes, but there is no explicit when-to-use guidance, no mention of prerequisites (e.g. a paired Garmin device), and no routing away from or toward related tools such as get_daily_overview.

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

get_daily_overviewDaily overviewA
Read-onlyIdempotent

One day from Garmin in one call: the daily summary (steps, resting heart rate, stress, calories, intensity minutes), the night's sleep, overnight HRV and Body Battery.

NameRequiredDescriptionDefault
dateNoCalendar date, YYYY-MM-DD. Defaults to today.
include_seriesNoInclude minute-by-minute series. Off by default: long series come back as count, min, max and average.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive and open-world behavior, so the safety profile is covered. The description adds that several data domains are combined into one response, which is genuinely useful context, but it says nothing about behavior with missing data (a day with no sleep or no HRV), response grouping, or why minute-level data is excluded by default — the main behavioral surprises an agent would hit.

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?

A single dense sentence with zero filler; the aggregate nature and the scope ('one day') are front-loaded before the enumeration of included metrics.

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?

For a multi-domain aggregate with no output schema, listing the five daily-summary fields plus sleep, HRV and Body Battery effectively stands in for a return-value description. What remains unstated is how the response is structured and whether sections are omitted on days with no data — minor gaps for an otherwise self-contained definition.

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

Parameters3/5

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

Schema coverage is 100%: the date pattern/default-to-today and the include_series count/min/max/average fallback are fully documented in the schema. The description adds no parameter detail beyond restating the single-day scope, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names the resource precisely and enumerates exactly what is returned (daily summary fields, sleep, overnight HRV, Body Battery) scoped to a single day. It is clear this is a bundled per-day snapshot, but it never explicitly contrasts itself with the many siblings that return the same underlying data (get_daily_summaries, get_sleep, get_hrv, get_body_battery), so an agent has to infer the distinction.

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

Usage Guidelines3/5

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

The phrase 'in one call' hints that this is the efficient aggregate alternative to calling the individual metric tools, but that is implication, not instruction. There is no explicit when-to-use (e.g. 'prefer this over separate get_sleep/get_hrv calls for a single day') and no when-not-to-use, even though nine siblings cover overlapping data.

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

get_daily_summariesDaily summariesA
Read-onlyIdempotent

Daily totals for a range of days: steps, distance, calories, resting heart rate, stress, intensity minutes, floors. Up to 92 days per call.

NameRequiredDescriptionDefault
end_dateNoLast day, YYYY-MM-DD, inclusive. Defaults to today.
start_dateYesFirst day, YYYY-MM-DD.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds useful operational context by naming the returned metric set and the 92-day per-call limit.

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?

The description is a single front-loaded sentence that names the resource, enumerates the metrics, and adds the key range limit. There is no wasted language.

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?

The description covers purpose, metrics returned, and the maximum range, while annotations handle the safety profile and the schema fully documents both parameters. It is complete enough to call correctly, though additional notes about missing-data behavior or timezone handling would make it fully comprehensive.

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?

The schema already documents both parameters at 100% coverage, including date format and the end_date default. The description adds meaningful semantic value by clarifying that the date parameters define a range and that the range may span up to 92 days per call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource and scope: daily totals over a range of days, with an explicit list of metrics. It is clear what the tool returns, but it does not explicitly distinguish itself from close siblings such as get_daily_overview or get_steps.

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

Usage Guidelines3/5

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

The description implies usage for multi-day daily aggregates and gives a maximum range of 92 days per call. However, it does not state when to use this tool versus alternatives like get_daily_overview, get_steps, or get_stress for similar data.

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

get_fitness_ageFitness ageC
Read-onlyIdempotent

Garmin's fitness age for a date.

NameRequiredDescriptionDefault
dateNoCalendar date, YYYY-MM-DD. Defaults to today.

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already declare readOnly, idempotent, non-destructive and open-world behavior, so the description adds essentially nothing beyond that. It does not say what the fitness age represents (units, derivation, whether it is Garmin-computed only), nor what happens when no data exists for the date.

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?

A single front-loaded sentence with no filler. It is efficient, though its brevity borders on under-specification rather than true conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/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 should say what is returned (a numeric age in years? an object with chronological age comparison?); it does not. For a metric tool whose only parameter is already documented, this leaves the agent guessing about the response shape.

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

Parameters3/5

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

Schema coverage is 100% and the single optional 'date' parameter is fully documented with format and today-default in the schema. The description adds no additional semantics, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource ('fitness age') and the source ('Garmin's') plus the temporal scope ('for a date'), so the agent can tell it returns a wellness metric. However, the verb is only implied and there is no explicit differentiation from the many metric siblings (get_hrv, get_body_battery, get_steps). It is identifiable but not sharply distinguished.

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

Usage Guidelines2/5

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

There is no guidance on when to use this versus other metric tools, no exclusions, and no alternatives named. Usage is only inferable from the tool name and the sibling list.

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

get_food_logFood logB
Read-onlyIdempotent

Foods logged in Garmin Connect for one day, with calories and macros.

NameRequiredDescriptionDefault
dateNoCalendar date, YYYY-MM-DD. Defaults to today.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful content-level context — that results carry calories and macros — which matters since no output schema exists, but it says nothing about empty days, multi-entry days, or response shape.

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?

One short sentence with the resource, scope, and returned content front-loaded. There is no filler or redundancy.

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?

For a read-only, single-optional-parameter tool with no output schema, the description covers what is returned at a high level (calories and macros) and the time scope. Minor gaps remain about per-entry structure and empty-day behavior, but nothing essential to invoking it is missing.

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

Parameters3/5

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

Schema coverage is 100% and the single optional 'date' parameter already documents the YYYY-MM-DD pattern and the today default. The description's 'one day' only reinforces single-date semantics; it adds no format or defaulting information beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific resource (foods logged in Garmin Connect) and adds the scope (one day) plus content (calories and macros), which clearly distinguishes it from siblings like get_hydration or get_daily_summaries. It lacks an explicit verb, but the intent to retrieve is unambiguous.

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

Usage Guidelines2/5

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

The phrase 'for one day' implies a single-date query, but there is no statement of when to use this versus get_daily_overview, get_daily_summaries, or get_hydration, and no exclusions or prerequisites. The agent must infer the routing from the tool name alone.

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

get_heart_rateHeart rate (one day)A
Read-onlyIdempotent

One day's heart rate: resting, minimum, maximum, the 7-day resting average, and (with include_series) the readings through the day.

NameRequiredDescriptionDefault
dateNoCalendar date, YYYY-MM-DD. Defaults to today.
include_seriesNoInclude minute-by-minute series. Off by default: long series come back as count, min, max and average.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare this as a safe, idempotent read operation. The description usefully adds that include_series controls whether minute-by-minute readings are returned and that long series may be summarized, which is meaningful output behavior beyond the annotations.

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?

It is a single compact sentence with the resource and returned fields front-loaded. Every clause contributes to telling the agent what it will get.

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 simple two-parameter read tool, the description covers the returned metrics and the key include_series behavior, while annotations and schema handle safety and parameter defaults. Nothing essential is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters are fully documented in the schema. The description reinforces the include_series conditional but adds little syntax or meaning beyond what the schema already states.

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 the exact resource and scope: one day's heart rate. It enumerates the returned metrics, including resting, minimum, maximum, and the 7-day resting average, so the agent knows precisely what this tool provides.

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

Usage Guidelines3/5

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

Usage is implied by the one-day heart-rate scope, but the description never states when to choose this over siblings such as get_hrv or get_body_battery. It gives no explicit exclusions or alternative routing.

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

get_hrvHeart rate variabilityA
Read-onlyIdempotent

Overnight HRV: for one night, the summary and readings; with an end_date, the nightly average, weekly average, baseline and status for each day in a range.

NameRequiredDescriptionDefault
end_dateNoLast day, YYYY-MM-DD, inclusive. Defaults to today.
start_dateNoCalendar date, YYYY-MM-DD. Defaults to today.
include_seriesNoInclude minute-by-minute series. Off by default: long series come back as count, min, max and average.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare this as a safe, idempotent read operation. The description adds useful behavioral context beyond that by explaining that the response changes from a single-night summary with readings to aggregated nightly averages, weekly averages, baseline, and status when an end_date is supplied.

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?

The description is a single dense sentence that front-loads the default single-night behavior and then explains the range behavior. There is no filler and every clause conveys a distinct mode or output detail.

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?

For a three-parameter read-only tool with no output schema, the description explains the two primary modes and what data is returned in each. It leaves some ambiguity, such as what happens if only start_date is provided, but the core behavior is sufficiently clear for an agent to invoke the tool correctly.

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 a 4 by adding semantic meaning beyond the schema: the presence of end_date switches the tool from single-night retrieval to a range aggregation mode with different returned fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the resource as overnight HRV and clearly describes the two data shapes: single-night summary/readings versus range-based nightly averages and status. It is specific enough that an agent can distinguish it from sibling metric tools like get_heart_rate or get_sleep, even though it does not explicitly name those siblings.

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 gives a clear conditional: without end_date you get one night, and with end_date you get per-day range summaries. This is actionable guidance for selecting between the two modes. It does not explicitly state when to prefer this over any sibling, but siblings cover different metrics, so the main usage decision is the date-range mode, which is covered.

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

get_hydrationHydrationB
Read-onlyIdempotent

Logged water intake against goal per day over a range.

NameRequiredDescriptionDefault
end_dateNoLast day, YYYY-MM-DD, inclusive. Defaults to today.
start_dateYesFirst day, YYYY-MM-DD.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, openWorld, so the safety profile is fully covered and the description needn't restate it. The description does add one piece of genuine behavioral value absent from structured data and from any output schema: the result is bucketed per day and reported against a goal. It says nothing about units, defaults, or empty/missing-day handling.

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?

A single eight-word fragment with zero filler. It is compact, but the absence of a leading verb makes it read like a field label rather than an instruction, so it is slightly under-structured rather than optimally front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read tool with rich annotations, the definition is broadly sufficient and does hint at the return shape (per-day intake vs. goal) despite no output schema. However, an agent still cannot know the unit of measurement, what a day with no log entries looks like, or the maximum range allowed.

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

Parameters3/5

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

Schema description coverage is 100% – start_date, end_date, format, inclusiveness, and the 'defaults to today' behavior are all documented in the schema. The description's phrase 'over a range' merely echoes that. Baseline 3 applies; no compensating detail is needed or added.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the specific resource (logged water intake) plus two distinguishing qualifiers: measured against a goal, aggregated per day, over a date range. That is far more specific than 'get hydration' and lets an agent tell it apart from get_daily_overview or get_food_log. It loses a point only because it is a verbless noun phrase that never says 'retrieves/returns'.

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

Usage Guidelines2/5

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

There is no statement of when to use this tool versus the many sibling data getters (get_daily_overview, get_food_log, get_daily_summaries), nor any exclusion or prerequisite. Usage can only be inferred from the resource name and the date-range parameters.

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

get_menstrual_cycleMenstrual cycleC
Read-onlyIdempotent

Cycle tracking for a date, if it's tracked in Garmin Connect.

NameRequiredDescriptionDefault
dateNoCalendar date, YYYY-MM-DD. Defaults to today.

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds the useful caveat that results only exist when the cycle is tracked in Garmin Connect, but says nothing about the return shape.

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?

A single efficient sentence with the data-availability condition front and center. It is not padded, though it is arguably too sparse to be fully useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description carries the burden of explaining what a caller receives, and it does not — it never states whether the response is a cycle phase, predicted dates, or logged symptoms. For a tool whose return value is entirely undocumented elsewhere, this is a notable gap.

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

Parameters3/5

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

With a single parameter at 100% schema description coverage, the schema already documents the YYYY-MM-DD format and today-default. The description adds no additional meaning about the date parameter, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names the resource (menstrual cycle tracking) and the data source (Garmin Connect), but uses a nominal phrase 'Cycle tracking' rather than a clear verb and never says what data is returned (phase, predictions, symptoms). An agent can guess it fetches cycle info for a date, but the purpose is only implied.

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

Usage Guidelines2/5

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

The clause 'if it's tracked in Garmin Connect' hints at a data-availability precondition, but there is no guidance on when to call this versus the many other daily-metric siblings, nor what to do when no cycle is tracked.

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

get_profileProfile and zonesA
Read-onlyIdempotent

Profile settings from Garmin Connect (units, age, sex, height, weight and others) and heart rate zones.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description usefully discloses the payload contents (profile attributes plus heart rate zones), but adds nothing about authorization requirements, per-account scoping, or whether zone data requires device sync.

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?

A single front-loaded sentence that names the source, the resource, and the key fields. The trailing 'and others' is slightly vague but keeps it brief; nothing extraneous.

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 no output schema, the description carries the burden of return-value disclosure and does so by listing the main fields returned. For a zero-parameter read tool with full annotation coverage, this is nearly complete, though a hint about the zones structure (sport-specific zones) would help.

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?

The tool takes no parameters, so the baseline is 4; the description correctly implies a parameterless single-profile fetch. Nothing is required of it beyond confirming the call needs no arguments.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (implicit retrieval) and resource: profile settings from Garmin Connect, enumerating units, age, sex, height, weight and heart rate zones. This clearly sets it apart from the metric-focused siblings like get_steps or get_sleep, though it never names them explicitly.

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

Usage Guidelines3/5

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

Usage is only implied — an agent can infer this is the tool for user profile attributes and zone configuration rather than daily metrics, but there is no explicit when-to-use statement or reference to alternatives among the 17 sibling tools.

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

get_sleepSleepA
Read-onlyIdempotent

Sleep for one night (stages, score, overnight heart rate, respiration) or, with an end_date, a nightly summary per day across a range. A night is filed under the date you woke up.

NameRequiredDescriptionDefault
end_dateNoLast day, YYYY-MM-DD, inclusive. Defaults to today.
start_dateNoCalendar date, YYYY-MM-DD. Defaults to today.
include_seriesNoInclude minute-by-minute series. Off by default: long series come back as count, min, max and average.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds valuable domain behavior beyond annotations, especially that a night is filed under the wake-up date and that range mode returns nightly summaries rather than detailed series.

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?

Two compact sentences with no filler. The primary single-night behavior is front-loaded, the range mode follows, and the wake-up-date caveat is appended efficiently.

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?

Given the rich annotations, fully described schema, and absence of an output schema, the description supplies everything an agent needs: what data is returned, how range mode is triggered, and the key date-filing convention.

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%, giving a baseline of 3. The description adds behavioral meaning to end_date by explaining that it enables a per-day summary across a range, and it clarifies the date-attribution rule for sleep nights; include_series behavior is left 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 states a specific resource (sleep) and distinguishes two modes: one night of detailed sleep data versus a nightly summary over a date range. It names the returned data categories (stages, score, overnight heart rate, respiration), so an agent can identify the tool immediately among health-metric siblings.

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 clearly explains that supplying an end_date switches from a single night to a per-day range summary, which is useful selection guidance. It does not explicitly say when to prefer get_daily_overview or get_daily_summaries, so it lacks full alternative routing.

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

get_spo2Pulse OxA
Read-onlyIdempotent

Blood oxygen (SpO2) for one day, with altitude acclimation where the watch reports it.

NameRequiredDescriptionDefault
dateNoCalendar date, YYYY-MM-DD. Defaults to today.
include_seriesNoInclude minute-by-minute series. Off by default: long series come back as count, min, max and average.

TDQS

A3.6/5.0
Behavior3/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 only needs to add value beyond that. It contributes the conditional-presence trait of altitude acclimation, but says nothing about empty results, units, or data latency for a same-day read.

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?

A single front-loaded sentence with the resource first and the qualifier second; no filler, no restatement of the title.

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?

For a two-parameter, zero-required read tool with no output schema, the description plus the rich schema covers what an agent needs to invoke it. A minor gap is the absence of any note on empty/no-data responses or units, which would matter for interpreting results.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters (date, include_series) are already fully documented, including the default-to-today behavior and the count/min/max/avg aggregation for long series. The description adds only the 'one day' single-date constraint, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names the exact resource (blood oxygen / SpO2), the temporal scope (one day), and an additional field dimension (altitude acclimation). That is enough for an agent to distinguish it from the metric-named siblings, though it never explicitly contrasts with them (e.g. get_heart_rate, get_hrv).

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

Usage Guidelines3/5

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

Usage is only implied: 'for one day' scopes the call, and 'where the watch reports it' hints that altitude data is conditionally present. There is no explicit when-to-use vs. sibling guidance, no statement of what to do when the device lacks SpO2, and no note about whether data is unavailable for future dates.

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

get_stepsStepsB
Read-onlyIdempotent

Steps, distance and step goal per day over a range.

NameRequiredDescriptionDefault
end_dateNoLast day, YYYY-MM-DD, inclusive. Defaults to today.
start_dateYesFirst day, YYYY-MM-DD.

TDQS

B3.4/5.0
Behavior3/5

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

The annotations already declare readOnlyHint, idempotentHint, openWorldHint, and non-destructive behavior, so the safety profile is covered. The description usefully discloses what data is returned (steps, distance, and step goal per day), but adds nothing about pagination, rate limits, or data availability windows.

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?

A single compact sentence with zero filler, front-loading the returned metrics followed by the time-scope qualifier. Every word earns its place.

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?

For a simple two-parameter read tool with full schema coverage and rich annotations, the description is largely complete; it names the returned data fields. The lack of an output schema is offset by the metric list, though more detail on response shape could help slightly.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema itself documents both start_date and end_date including format and default. The description's phrase "over a range" adds no semantic detail beyond the schema, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly names the resource (steps, distance, step goal) and the per-day granularity over a date range. It is specific enough to distinguish from sleep, HRV, or activity-list siblings, though it doesn't explicitly name any alternative.

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

Usage Guidelines2/5

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

It gives no guidance on when to use this tool versus alternatives like get_daily_overview or get_daily_summaries, nor any prerequisites or exclusions. The agent must infer usage from the name alone.

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

get_stressStressB
Read-onlyIdempotent

Average and maximum all-day stress per day over a range.

NameRequiredDescriptionDefault
end_dateNoLast day, YYYY-MM-DD, inclusive. Defaults to today.
start_dateYesFirst day, YYYY-MM-DD.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so safety behavior is covered. The description adds useful output context by specifying average and maximum all-day stress per day, but it does not mention units, timezone handling, missing-data behavior, or pagination.

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?

The description is a single concise sentence, front-loaded with the returned metrics and scope. There is no redundant or filler text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool, the schema and annotations cover most invocation requirements. However, with no output schema, the description could do more to explain return-value details such as units, daily aggregation boundaries, or handling of missing stress data.

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

Parameters3/5

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

Schema description coverage is 100%, so start_date and end_date are already documented with format and default behavior. The description's phrase 'over a range' reinforces the date-range semantics but adds no syntax or constraint details beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the resource and the returned metrics: average and maximum all-day stress per day over a date range. It distinguishes the tool from general health siblings by focusing specifically on stress, though it does not explicitly name or contrast sibling tools.

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

Usage Guidelines2/5

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

The description gives no explicit guidance on when to use this tool versus alternatives such as get_daily_overview or get_body_battery. Usage is only implied by the resource name and the mention of a date range.

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

get_training_logTraining logA
Read-onlyIdempotent

Every activity in a period, with the main fields from Garmin's activity list under Garmin's own names and values: distance (m), duration (s), speed (m/s), grade-adjusted speed, elevation, heart rate, cadence, power and power curve (maxAvgPower_), TSS, intensity factor, training effect and load, fastest splits (fastestSplit_, in seconds) and seconds per heart rate and power zone. Up to 366 days per call.

NameRequiredDescriptionDefault
sportNoOnly activities of this sport, by Garmin activity type. Omit for all.
end_dateNoLast day, YYYY-MM-DD, inclusive. Defaults to today.
start_dateYesFirst day, YYYY-MM-DD.

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds genuinely new context: that Garmin's own field names and units are used (e.g. power curve as maxAvgPower_<seconds>, splits as fastestSplit_<metres>), which an agent cannot infer from annotations or schema.

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?

Front-loaded with what the tool returns, then the field inventory, then the range cap. The field enumeration is long but earns its place because there is no output schema; only minor tightening is possible.

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 no output schema, the description correctly compensates by naming the returned fields and their units, which is what an agent needs to interpret results. The missing piece is how this differs from list_activities/get_activity, which matters given six-plus sibling activity tools.

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

Parameters3/5

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

Schema description coverage is 100%, so sport and the date bounds are already documented, including the inclusive end_date default. The description adds only the 366-day span limit, which is relevant context but does not deepen parameter meaning beyond the schema baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource (every activity in a period) plus the exact field set returned under Garmin naming conventions, which is far more concrete than a restatement of the name. It does not, however, distinguish itself from siblings like list_activities or get_activity, leaving ambiguity about which tool returns what.

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

Usage Guidelines2/5

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

There is no guidance on when to use this versus list_activities or get_activity, no mention of prerequisites or typical query patterns. The only usage constraint given is the 366-day-per-call cap, which is a limit rather than a selection rule.

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

get_weightWeight and body compositionB
Read-onlyIdempotent

Weigh-ins over a range, with body fat, muscle mass and BMI where a scale records them.

NameRequiredDescriptionDefault
end_dateNoLast day, YYYY-MM-DD, inclusive. Defaults to today.
start_dateYesFirst day, YYYY-MM-DD.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful context that the composition metrics are conditional ('where a scale records them'), meaning fields may be absent. It does not cover behavior for days with no weigh-in or the response shape.

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?

One front-loaded sentence with no filler; the key qualifier about which metrics are returned is placed immediately. It is arguably a touch terse for a tool whose output fields are variable, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With only two date parameters, full schema coverage, no output schema and annotations covering safety, the description is nearly sufficient. It still leaves open whether missing-scale days yield empty entries or omitted fields, which matters for parsing the variable composition data.

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

Parameters3/5

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

Schema description coverage is 100%: both start_date and end_date are documented including inclusive semantics and the default-to-today behavior. The description's 'over a range' adds nothing the schema doesn't already say, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names the specific resource (weigh-ins) and enumerates the returned metrics (body fat, muscle mass, BMI), which clearly separates it from siblings like get_body_battery or get_steps. The verb is only implied by 'over a range' rather than stated as 'retrieve/list', and no sibling is named.

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

Usage Guidelines2/5

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

There is no statement of when to use this versus other body-metric tools, no prerequisites (e.g. a connected scale), and no exclusions. The date-range scoping is the only implied usage signal.

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

list_activitiesList activitiesA
Read-onlyIdempotent

Recorded activities, newest first: type, start time, duration, distance, heart rate, power, pace and training effect. Filter by date range or type (for example running, cycling, lap_swimming, strength_training). Use get_activity for one activity in full.

NameRequiredDescriptionDefault
limitNoHow many, 1–100. Default 20.
offsetNoSkip this many, for paging. Default 0.
end_dateNoLatest day, YYYY-MM-DD.
start_dateNoEarliest day, YYYY-MM-DD.
activity_typeNoGarmin activity type key, e.g. running, cycling.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/non-destructive, so the safety profile is covered. The description adds real behavioral context beyond that: results are ordered newest-first and each row carries a fixed set of metrics, which tells the agent what a response looks like. Pagination defaults are left entirely to the schema.

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?

Two sentences, no filler. The return-shape and ordering information is front-loaded, and the routing hint to get_activity closes the description cleanly.

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 no output schema, the description usefully enumerates the returned fields and ordering, and filtering is explained. Only paging behavior and result-size expectations are unaddressed in prose, though the schema covers them adequately.

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 limit/offset/date bounds are fully documented and the baseline would be 3. The description adds meaning on the one weakly-specified parameter, activity_type, by giving concrete example values (running, cycling, lap_swimming, strength_training) even though no enum exists 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 the specific resource (recorded activities), the ordering ('newest first'), and exactly which fields come back (type, start time, duration, distance, heart rate, power, pace, training effect). It also names the sibling it is not — 'Use get_activity for one activity in full' — so an agent can separate list vs. detail without opening either schema.

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?

Gives clear usage context: filter by date range or activity type, and defer to get_activity when a single full record is needed. It does not cover when-not conditions such as aggregate/training-load queries (get_training_log) or per-day rollups (get_daily_summaries), which are plausible confusions among the siblings.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 18 tool updatesv0.1.0
    • First observedget_activity
    • First observedget_body_battery
    • First observedget_daily_overview
    • First observedget_daily_summaries
    • First observedget_fitness_age
    • First observedget_food_log
    • First observedget_heart_rate
    • First observedget_hrv
    • First observedget_hydration
    • First observedget_menstrual_cycle
    • First observedget_profile
    • First observedget_sleep
    • First observedget_spo2
    • First observedget_steps
    • First observedget_stress
    • First observedget_training_log
    • First observedget_weight
    • First observedlist_activities

TDQS

B3.4/5.0

Scored across 18 tools

Disambiguation4/5

Most tools target a single distinct Garmin metric (weight, HRV, SpO2, hydration, food log, menstrual cycle) and are easy to tell apart. The main overlap is between get_daily_overview (one-day bundle), get_daily_summaries (range totals), and the per-metric range tools like get_steps/get_stress; descriptions clarify the difference but an agent could still dither between overview and summaries. The activity trio (list_activities, get_training_log, get_activity) is also close, though the description passes the reader from list to detail.

Naming Consistency4/5

Nearly everything follows a clean get_<noun> snake_case pattern, which makes the set highly predictable. The single list_activities deviates from the get_* convention, though 'list' is arguably semantically correct for a collection endpoint.

Tool Count4/5

18 tools is on the heavy side but each maps to a real, non-redundant Garmin metric or resource. Nothing feels padded, though a couple of range tools could conceivably be folded into the summary tools.

Completeness4/5

Coverage of Garmin health data is broad: profile/zones, sleep, HRV, Body Battery, stress, steps, heart rate, SpO2, activities, training log, hydration, food and cycle tracking. Gaps exist around derived training metrics (VO2 max, training status/readiness, personal records) and device management, but the core read-only surface is largely complete.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables Claude to access and query your Garmin Connect data, including sleep, activities, training load, and health metrics, through a set of read-only MCP tools.
    28
    228 PyPI
    4
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables local, read-only access to Garmin Connect health and training data through MCP, letting assistants summarize recovery, sleep, activities, and more without uploading your data.
    24
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables read-only access to Garmin Connect health and activity data, including daily summaries, sleep, heart rate, stress, Body Battery, HRV, training readiness, activities, and devices.
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Garmin Connect for Claude and any MCP client, on Garmin's official Personal API. Read-only access to sleep, HRV, Body Battery, stress, heart rate, activities and weight with a revocable key, no password or scraping.
    26
    37
    MIT