Skip to main content
Glama

garmin-owl

garmin-owl is a local-only, read-only Garmin MCP server for macOS and Ubuntu Linux. It gives an MCP client such as Claude Desktop concise health and training context without uploading a separate copy of your Garmin data or adding any Garmin write capability.

It uses the unofficial python-garminconnect client, so Garmin API changes may occasionally require updates.

Quick start

On macOS or Ubuntu, install uv and Git. You’ll also need a Garmin Connect account. uv manages Python 3.12+ and the project environment for you; no manual environment activation is needed.

git clone https://github.com/xichen-de/garmin-owl.git
cd garmin-owl
uv sync --locked
uv run garmin-owl-auth

You'll be prompted in your terminal for your Garmin email, password, and MFA code if your account uses one. Only a reusable session token is saved, to ~/.garminconnect. The MCP server never asks the model for any of these.

Re-run uv run garmin-owl-auth any time to check your saved tokens — it only re-authenticates if they've expired.

The unofficial Garmin client uses your email, password, and optional MFA code to obtain reusable session tokens from Garmin. Enter these only in the terminal authentication prompt. The project saves tokens locally, not your password; credentials never enter the MCP conversation.

Related MCP server: garmin-mcp

Install in Claude Desktop

Use the same steps on macOS and Ubuntu with a Claude Desktop installation that supports Extensions:

  1. Complete the quick start above, using the same OS user that runs Claude Desktop.

  2. Download a .mcpb from Releases, or build your checkout.

  3. Open Claude Desktop → SettingsExtensions and drag in the .mcpb file.

  4. Enable the extension, restart Claude Desktop if prompted, and start a new chat.

The extension uses uv and reuses your saved Garmin tokens.

Then try:

  • "Summarize my recovery today."

  • "How did I sleep last night?"

  • "Compare my last two activities."

  • "Show my 28-day recovery trend."

  • "How does my cycle day line up with my recovery?"

The bundle contains the project source but no credentials, tokens, or health data.

For clients that accept mcpServers JSON, use this configuration. Replace both placeholder paths with the output of command -v uv and pwd from the repository. This works on macOS and Ubuntu; the config file location depends on your client.

{
  "mcpServers": {
    "garmin-owl": {
      "command": "/absolute/path/to/uv",
      "args": ["--directory", "/absolute/path/to/garmin-owl", "run", "garmin-owl"]
    }
  }
}

Use absolute paths because desktop apps may not inherit your terminal’s PATH. Running uv run garmin-owl directly waits for MCP messages on stdin; it does not show an interactive prompt.

Available tools

19 read-only tools. There are no write tools.

One day at a time

Tool

Answers

get_daily_summary

Steps, activity/sedentary time, goals, calories, HR, stress, respiration, SpO2, Body Battery

get_sleep

Sleep score/need, stages, timing, sleeping HR/stress, respiration, SpO2, Body Battery change, skin-temperature deviation

get_hrv

HRV status, nightly and weekly averages

get_body_battery

Charged, drained, and start/end/highest/lowest levels

get_stress

Average and max stress, plus durations by intensity band

get_training_readiness

Garmin's readiness score, components, and factor feedback

get_body_composition

Weight and related measurements over a date range

get_cycle

Cycle phase, day, and Garmin predictions

Activities and training

Tool

Answers

get_activities

Activities in a date range, enriched for walking, cycling, and cardio (defaults to the last 14 days)

get_recent_activities

Activities from the last N days, optionally filtered by type

get_activity

One activity's laps, training effect, and HR/power zones

compare_activities

Side-by-side metrics for 2–10 activities

get_training_week

Mon–Sun totals and zone time, with per-metric coverage

get_training_load

Acute/chronic load, ratio/status, load focus/targets, VO2 max, endurance, hill, acclimation

get_training_zones

Configured HR and cycling-power zone thresholds

get_running_tolerance

Garmin running distance, impact load, tolerance, and feedback over 1–90 days

Combined and trends

Tool

Answers

get_recovery

Sleep, HRV, Body Battery, stress, RHR, and readiness for one day

get_recovery_trend

Sleep HR, skin-temperature deviation, HRV, RHR, readiness, and Body Battery across 7, 14, or 28 days

get_training_context

Recovery plus the requested date's preceding training

How results are reported

  • Garmin values and garmin-owl calculations stay distinguishable. Derived comparisons state their baseline dates, sample count, and formula.

  • Missing metrics stay missing. Nothing is guessed, and nothing absent is summed as zero.

  • Totals disclose their coverage — how many activities actually reported the metric.

  • An availability list explains every gap, distinguishing "Garmin had no data" from "unsupported on this device" from "the read failed or was rate-limited."

get_cycle intentionally excludes notes, symptoms, moods, sexual activity, and raw daily logs.

Sync and local cache

Optional, but makes later requests faster:

uv run garmin-owl-sync            # last 7 days
uv run garmin-owl-sync --days 30

This loads daily summaries, sleep, HRV, training readiness, and activity summaries, fetching only what's missing or stale. Body Battery, stress, activity details, and cycle data are fetched on demand instead.

uv run garmin-owl-cache-info      # inspect
uv run garmin-owl-cache-clear     # clear (leaves auth tokens alone)

The cache lives at:

  • Ubuntu/Linux: ~/.local/share/garmin-owl/garmin.sqlite, or $XDG_DATA_HOME/garmin-owl/garmin.sqlite when XDG_DATA_HOME is an absolute path.

  • macOS: ~/Library/Application Support/garmin-owl/garmin.sqlite.

Set GARMIN_OWL_DB to override either default. If you previously ran this project on Linux, set GARMIN_OWL_DB to the old ~/Library/Application Support/garmin-owl/garmin.sqlite path to reuse that cache; otherwise the new cache fills on demand. Tokens remain at ~/.garminconnect on both platforms.

Watches and scales upload late, so a calendar day is treated as settled only at noon the following day.

A record is trusted indefinitely once it was fetched after its day settled. A record captured while the day was still synchronizing is reused for at most 20 minutes, then re-fetched — so a partially synced day never becomes permanently authoritative. The same rule covers date ranges and cached activity details.

Troubleshooting

garmin-owl never retries automatically and never surfaces raw Garmin responses, so error messages are short.

Message contains

Meaning

Fix

"No local Garmin tokens found"

Not authenticated yet, or ~/.garminconnect was deleted

Run uv run garmin-owl-auth

"authentication expired or was rejected"

Garmin logged the session out (e.g. after a password change)

Run uv run garmin-owl-auth again

"rate limit reached"

Too many Garmin requests too quickly

Wait a few minutes; running garmin-owl-sync less often also helps

"Garmin Connect is unavailable"

A transient network or Garmin outage

Try again later

"unexpected response shape"

Garmin changed a private endpoint's fields

Open an issue with the tool name (never paste your Garmin data)

"no data for this request"

That metric isn't recorded for that date or device

Expected for unsupported metrics; not an error to fix

If the extension doesn't appear after installing, confirm the .mcpb matches the one built for your checkout and restart Claude Desktop. If tools time out on first use, run uv run garmin-owl-sync once so the cache is warm.

Privacy and safety

  • Garmin access is read-only, over local stdio.

  • Tokens stay in ~/.garminconnect; normalized data stays in the local SQLite cache.

  • Output excludes credentials, account identifiers, raw GPS coordinates, and private cycle logs.

  • Health summaries are informational, not medical advice.

Review your MCP client's own privacy and data-retention settings before sending health information to any model.

Development

uv sync --extra dev
uv run pytest
uv run ruff check .
uv run mypy src tests

Build the Desktop extension

On macOS or Ubuntu, install Node.js LTS with npm (which includes npx), plus uv. From the repository, run:

./scripts/build-extension.sh

The script checks release versions, validates manifest.json, and writes dist/garmin-owl-<version>.mcpb. The first build needs internet access to download the pinned packaging tool and any missing Python dependencies. Drag the resulting file into Claude Desktop’s Extensions settings to install or update it.

All three commands below are redacted by design: they report structure, key names, and exception classes only — never response values.

Check a live connection:

uv run garmin-owl-smoke --activity-id ACTIVITY_ID

Garmin returns trainingStatus as an unlabeled numeric code. garmin-owl reports it as training_status_code and does not guess what a code means; training_status is populated only when Garmin also sends wording. To see whether your account's response carries a label key:

uv run python -m garmin_owl.diagnostic --training-status 2026-08-31

To check whether a metric is reachable at all through reads garmin-owl is already permitted to make, scan those responses for matching key names. This goes through the same allow-list the server uses, so it cannot look anywhere the server itself cannot:

uv run python -m garmin_owl.diagnostic --find-keys 2026-08-31 temp

Limitations and removal

Garmin Connect is a private API, and metric availability varies by device and account. If Garmin changes an endpoint, authentication or individual reads may temporarily fail.

To remove garmin-owl, uninstall the extension in Claude Desktop and delete the repository, and optionally the SQLite cache. Remove ~/.garminconnect only if you also want to discard Garmin tokens used by other tools.

Available Tools

19 tools
compare_activitiesA

Compare 2-10 activities; each metric range states how many reported a value.

ParametersJSON Schema
NameRequiredDescriptionDefault
activity_idsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It adds a useful output nuance ('each metric range states how many reported a value'), but it does not explicitly state that the operation is read-only or disclose any other behavioral traits. The comparison is implicitly safe but not stated.

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 entire description is a single front-loaded sentence with no filler. It packs the core action, the resource bound, and a key output interpretation detail into minimal 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?

Given the low complexity (one array parameter) and the presence of an output schema, the description covers the essential scope and an important output nuance. The only notable absence is explicit sibling differentiation, which is not critical for this simple 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?

The schema provides zero description coverage for activity_ids, so the description must compensate. It implies the array-length constraint (2-10) but does not explain what the IDs refer to or any formatting expectations; the meaning relies heavily on the parameter name.

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 concrete operation ('Compare') on a bounded resource (2-10 activities), which is specific enough to distinguish it from sibling get_activity/get_activities tools. The count range adds precision beyond a generic 'compare activities' phrasing.

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 context is only implied: the plural comparison semantics suggest choosing this over get_activity/get_activities, but there is no explicit when-to-use or when-not-to-use guidance. An agent must infer the selection criteria from the tool name and siblings.

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

get_activitiesA

List concise activities in an inclusive date range; defaults to the last 14 days.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
end_dateNo
start_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden and does disclose two useful behaviors: date boundaries are inclusive, and the default window is the last 14 days. It stops short of describing ordering, pagination, the meaning of 'concise', or what the returned activities look like.

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 core purpose and then adds the key default behavior. Every word earns its place; there is no repetition or filler.

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 three-parameter list tool, the description is reasonably complete, but gaps remain: no mention of limit behavior, no output shape, and no guidance on how this tool relates to its siblings. It is sufficient for basic use but not fully self-contained.

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 0% schema description coverage, the description must compensate for the schema's bare property names. It adds meaningful semantics for start_date and end_date by specifying inclusivity and the default range, but it says nothing about the limit parameter or acceptable date formats.

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 action ('List'), the resource ('concise activities'), and the scope ('inclusive date range; defaults to the last 14 days'). It is specific and understandable, but it does not explicitly differentiate get_activities from sibling tools like get_recent_activities or compare_activities.

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: call it to list activities within a date range, and call it with no arguments to get the last 14 days. However, it never mentions when to prefer get_recent_activities, compare_activities, or get_cycle, nor does it state any exclusions.

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

get_activityB

Get one activity summary, laps, training effect, and available HR/power zones.

ParametersJSON Schema
NameRequiredDescriptionDefault
activity_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the behavioral disclosure burden. It clearly implies a read-only operation and notes that HR/power zones are 'available' rather than guaranteed, but it does not mention behaviors like how missing activity IDs are handled, auth requirements, or response edge cases.

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?

The description is a single compact sentence with no filler or redundant qualifiers. It front-loads the core action and then enumerates the specific returned data, making it easy to scan.

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 one-parameter getter with an output schema present, the description provides the key information needed to invoke it: the singular scope and the kinds of data returned. It omits usage guidance and edge-case behavior, but those are partially inferable from sibling names and the output schema.

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?

The schema has 0% description coverage and only defines activity_id as a required integer. The description does not explicitly explain the parameter, but the property name and title 'Activity Id' are self-explanatory for a one-parameter getter, so the gap is minor.

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 uses a specific verb and resource ('Get one activity') and lists concrete output categories (summary, laps, training effect, HR/power zones). The word 'one' distinguishes it from plural siblings like get_activities and get_recent_activities, though it does not explicitly contrast with compare_activities.

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 explicit guidance about when to use this tool versus sibling tools. The singular 'one activity' implies it is for a single activity's detail, but the description does not state to prefer it over get_activities or compare_activities, leaving the selection decision to inference.

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

get_body_batteryA

Get Garmin Body Battery charged/drained and start/end/high/low levels for one day.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
include_timeseriesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the burden of disclosing behavior. It clearly states what data is returned, but it does not explain behavior around optional inputs like date nullability or include_timeseries, nor does it mention any side effects or access requirements.

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, efficient sentence with no filler. It front-loads the tool's purpose and includes useful output details without becoming verbose.

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?

The output schema covers return values, but the description lacks guidance on parameter behavior and usage when to use this tool versus siblings. It is adequate for a simple read operation but leaves optional-input semantics and selection context to the agent.

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

Parameters2/5

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

The input schema has 0% description coverage, so the description must compensate. It vaguely maps to the date parameter through 'for one day', but it says nothing about include_timeseries, date format, or what a null date means. An agent would need to infer most parameter semantics.

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 uses a specific verb ('Get'), names a clear resource ('Garmin Body Battery'), and specifies scope ('for one day'). It also enumerates the main outputs (charged/drained, start/end/high/low levels), which distinguishes it from sibling tools like get_sleep or get_daily_summary.

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 this is the tool for day-level Body Battery data, but it gives no explicit guidance on when to choose it over alternatives like get_daily_summary. There are no stated conditions, exclusions, or references to sibling tools.

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

get_body_compositionA

Get weight and Garmin-provided body composition for at most 366 days.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
start_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

Without annotations, the description carries the behavioral burden. It adds transparency about the maximum date range and data source, but it does not disclose default behavior when dates are omitted, date format expectations, or how the endpoint handles over-range requests.

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 verb, resource, and key constraint all appear before any secondary details.

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 an output schema and only two optional simple parameters, the missing pieces are small, but the lack of default-date behavior and usage routing leaves an agent to infer how to call it without arguments.

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 0%, so the description must compensate. It adds the meaningful constraint that start/end dates span at most 366 days, but it does not document date syntax or what null defaults mean for each parameter.

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 ('Get'), resource ('weight and Garmin-provided body composition'), and a concrete boundary (at most 366 days). This clearly differentiates it from sibling health-data tools by naming the body-composition resource.

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 resource name implies use when body composition or weight data is needed, and the 366-day cap is a useful constraint. However, it does not explicitly state when to prefer this tool over siblings or give exclusions.

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

get_cycleB

Get normalized cycle phase/timing without notes, symptoms, or raw day logs.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It adds useful context by noting the output is normalized and excludes notes, symptoms, and raw day logs, but it does not explain what 'normalized' means, how date selection affects results, or any data-availability caveats.

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 with no filler. Every word contributes to the core semantics of what is returned and what is excluded.

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?

The tool is simple with one optional parameter and an existing output schema, so return-value documentation is not required. However, the missing date semantics and lack of usage guidance leave some ambiguity about how to invoke it correctly, especially when a specific date is needed.

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

Parameters2/5

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

The single optional 'date' parameter has 0% schema description coverage and the description does not mention date at all. The agent is given no guidance about accepted formats, default behavior, or what null means, so the description fails to compensate for the missing schema detail.

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 uses the verb 'Get' with a specific resource, 'normalized cycle phase/timing', and explicitly states what is omitted ('without notes, symptoms, or raw day logs'). This identifies the tool's function clearly, though it does not directly differentiate from the listed siblings since none target cycle data.

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 explicit statement of when to use this tool versus alternatives. The exclusions imply a summary use case, but no sibling or alternative tool is named and no contextual conditions are provided.

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

get_daily_summaryC

Get activity time/goals, HR, stress, respiration, SpO2, Body Battery, steps/calories.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Get' implies a read operation, but the description does not clarify date behavior, defaults, authentication requirements, or any other operational constraints. It only lists returned fields rather than explaining how the tool behaves.

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?

The description is a single compact sentence with a front-loaded verb and a useful list of metrics. There is no filler or repetition, though it sacrifices necessary parameter information for brevity.

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?

For a tool with one optional parameter and an output schema, the description is too thin. It omits any mention of the date parameter and provides no usage or behavior context, leaving the agent to infer too much from the tool name and schema alone.

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

Parameters1/5

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

The only parameter, 'date', is completely absent from the description, while schema description coverage is 0%. The schema only provides a type and default, so the agent receives no guidance on date format, accepted values, or what omitting the date means.

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 clear verb and resource: 'Get activity time/goals, HR, stress, respiration, SpO2, Body Battery, steps/calories.' It enumerates the data points returned, making the tool's purpose obvious. It does not explicitly contrast with sibling tools such as get_stress or get_body_battery, but the 'daily summary' framing implies an aggregate view.

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 tool versus the many sibling tools that cover individual metrics. It does not mention alternatives, exclusions, or scenarios where a different tool would be more appropriate.

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

get_hrvA

Get Garmin HRV status and nightly values; optional readings are capped at 48 points.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
include_timeseriesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It adds a useful, non-obvious limitation: optional readings are capped at 48 points. The read-only nature is implied by 'Get', though not explicitly stated, so there is still some room for more transparency.

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 sentence with no filler. The main purpose is front-loaded, and the limiting behavior is appended clearly. Every word earns its place.

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?

The description is adequate for a simple getter, especially since an output schema exists to document return fields. However, it fails to explain the semantics of the date parameter and offers no usage guidance relative to siblings, leaving moderate gaps for an agent to resolve.

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

Parameters2/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 compensate for the two parameters. It indirectly references timeseries readings, which maps to include_timeseries, but it never explains the date parameter, its default behavior, or what the returned values represent. This is insufficient for full parameter clarity.

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 gives a specific verb and resource: retrieving Garmin HRV status and nightly values. This is immediately distinguishable from sibling tools focused on sleep, stress, recovery, or body composition, so an agent can tell what domain this tool belongs to.

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 about when to choose this tool over siblings, nor whether it should be used for current status versus historical HRV data. The 'optional readings' note hints at timeseries usage, but the description never states when to use it or what the date parameter should represent.

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

get_recent_activitiesA

List recent cached activities with bounded days/limit and optional exact type filter.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo
limitNo
activity_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the burden, and it does add some behavioral detail: 'cached' signals possibly stale data, and 'bounded' signals output limits. However, it doesn't address side effects, freshness behavior, ordering, or error handling beyond that.

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 dense, front-loaded sentence that gets the core resource and operation first, then appends the relevant constraints. No filler or repetition of schema defaults/enums.

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?

The simple operation, output schema, and defaults make the definition mostly usable, but the lack of usage guidance and any note about what 'cached' implies for data freshness leaves an agent with some ambiguity relative to the 14 sibling tools. Adequate for basic invocation, not fully complete.

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 0%, so the description must add meaning to bare parameter names. It does: days and limit are called out as bounded, and activity_type is described as an optional exact filter. This meaningfully compensates for the lack of parameter descriptions.

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 action ('List') on a specific resource ('recent cached activities') and captures the key parameter semantics ('bounded days/limit' and 'optional exact type filter'). This is specific enough to distinguish it from siblings like get_activity (single record) and get_activities (broader list).

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 implies a simple use case but never says when to prefer this tool over alternatives such as get_activities or get_activity, nor does it state exclusions or prerequisites. An agent must infer the intended context from the name and 'cached' qualifier.

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

get_recoveryA

Combine Garmin sleep, HRV, Body Battery, stress, RHR, readiness; states why any is absent.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations provided, the description carries the disclosure burden, and it succeeds by revealing that the tool explicitly reports missing data with reasons. This is valuable behavioral context beyond a plain metric fetch. It does not mention authentication, rate limits, or data source freshness, but the presence of an output schema reduces the need to describe return structure.

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 names the resource, the operation, the involved metrics, and the absence-handling behavior. It has zero filler and front-loads the core aggregation purpose, making it highly scannable for an agent.

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?

Given the output schema exists to document return values, the description covers the essential selection context: what data is aggregated and how missing data is handled. The only minor gap is date format/semantics, but with a single optional parameter and default null, the tool remains fully invocable. This is slightly better than the minimum viable definition.

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 description coverage is 0%, so the description must compensate for the single 'date' parameter. While the description doesn't explicitly mention the parameter, the tool's name and action make it clear that an optional date selects the recovery window. With only one optional parameter and a clear default of null, the semantics are reasonably inferable.

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 verb ('Combine') and resource ('Garmin sleep, HRV, Body Battery, stress, RHR, readiness'), making the tool's purpose clear. It does not explicitly differentiate it from sibling tools like get_daily_summary or get_training_readiness, but the aggregation framing sets it apart from the individual metric tools.

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 phrase 'states why any is absent' implies this tool is a comprehensive recovery aggregator, useful when a consolidated view is wanted instead of querying each metric separately. It doesn't explicitly list exclusions or alternatives, but the 'combine' wording gives enough context for an agent to select it over getting single-metric siblings.

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

get_recovery_trendA

Trend sleep HR/temp, HRV, RHR, readiness, and Body Battery over 7/14/28 days.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It clearly implies a read-only aggregation over historical data, but it does not explain whether the result is a point-in-time series, averaged values, or how missing data is handled. The existence of an output schema mitigates some ambiguity.

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 with no filler. It states the action, the metrics covered, and the supported time windows efficiently. 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 one-parameter query tool with an output schema, the description is largely sufficient: it identifies the metrics, time windows, and parameter meaning. It lacks only an explicit statement of what 'Trend' returns, but the output schema presumably covers return values, so this is a minor 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?

Schema coverage is 0%, so the description must compensate. The phrase 'over 7/14/28 days' adds meaning to the single 'days' parameter by hinting at valid values, which the schema does not constrain with an enum. However, it does not explicitly document the parameter name, default behavior, or what happens for values outside 7/14/28.

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 a specific action ('Trend') and a resource set ('sleep HR/temp, HRV, RHR, readiness, and Body Battery') over explicit windows (7/14/28 days). This makes the tool's purpose clear and distinguishes it from siblings like get_hrv or get_sleep, though it does not explicitly name any sibling to contrast with.

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 time-window language: this is the tool for multi-day recovery trends rather than single-day snapshots. However, the description never states when to prefer this over get_recovery, get_hrv, or get_training_readiness, nor does it mention any exclusions or conditions.

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

get_running_toleranceB

Get 1-90 days of Garmin running distance, impact load, tolerance, and feedback.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo
end_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden of revealing behavior. It clearly indicates a read operation and describes the retrieved data, which is useful. However, it doesn't disclose what happens if days is outside the 1-90 range, how end_date interacts with days, or any response-format caveats that the output schema may not cover.

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 sentence with no filler, repetition, or redundant phrasing. Every word adds meaningful detail and the key information is 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?

Given the tool's simplicity, an output schema exists, and the description covers core what-it-returns and the time range, the definition is serviceable. But it lacks usage guidance versus sibling tools and doesn't explain end_date interpretation, leaving a moderately informed agent to guess about edge cases.

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

Parameters2/5

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

With 0% schema description coverage, the description must compensate for undocumented parameters. It does provide a range ('1-90 days') for the days parameter, which adds some meaning, but it says nothing about end_date beyond its name. The description leaves the relationship between days and end_date unclear, and doesn't cover format or validation details.

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 uses a specific verb ('Get') and clearly identifies the resource (running tolerance) and the data fields returned (Garmin running distance, impact load, tolerance, feedback). It also specifies a time range (1-90 days), making the tool's scope unambiguous. It doesn't explicitly differentiate from siblings like get_training_status or get_daily_summary, but the metric list is distinctive enough.

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 guidance on when to use this tool versus alternatives; it doesn't mention any sibling tools, prerequisites, or conditions that would select this tool over others. The '1-90 days' phrase is a parameter constraint, not usage guidance.

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

get_sleepC

Get sleep score/need, stages, HR/stress, respiration, SpO2, and skin-temp deviation.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are present, so the description carries the full burden of behavioral disclosure. The verb 'Get' implies a read-only operation, but the description does not explain date semantics (e.g., what passing null means), timezone behavior, or how missing sleep data is handled. It only lists metric categories.

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?

The description is a single, front-loaded sentence that efficiently lists the tool's key outputs with no filler. It is appropriately compact, though the brevity contributes to the omission of parameter and usage context captured in other dimensions.

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?

An output schema exists, so the return shape is covered, but the date parameter's format and behavior are undocumented, no sibling differentiation or usage conditions are given, and there are no annotations to fill gaps. These omissions make confident invocation harder than necessary for a tool with one critical parameter.

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

Parameters1/5

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

The description does not mention the sole 'date' parameter, which has 0% schema description coverage. The input schema only indicates a string/null with a default of null, leaving the expected date format and meaning of null undocumented; the description fails to compensate for this gap.

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 uses a specific verb ('Get') and names the resource ('sleep') while enumerating the returned metrics: sleep score/need, stages, HR/stress, respiration, SpO2, and skin-temp deviation. This makes the tool's function clear, though it does not explicitly differentiate it from overlapping siblings like get_recovery, get_hrv, and get_stress.

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?

There is no explicit statement about when to use this tool versus alternatives. The name and metric list imply it is for sleep-related data, but no exclusions or alternate tool mentions are provided, leaving the selection to inference.

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

get_stressA

Get Garmin daily average/max stress and per-band durations; series capped at 48 points.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
include_timeseriesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations provided, the description carries full responsibility for behavioral disclosure. It explicitly notes the series is capped at 48 points, a meaningful limitation, and indicates daily aggregation. However, it does not address auth, permissions, or other side effects, though the cap is a key disclosed behavior.

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 12-word sentence that front-loads the primary action and result before stating the limitation. Every word earns its place with no redundancy.

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?

The description is adequate for a simple tool but leaves notable gaps: parameter semantics are thin, and 'per-band durations' is not defined. The presence of an output schema covers return types, but usage and parameter details would need to be inferred from parameter names and sibling context.

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?

The input schema has 0% description coverage, so the description must compensate for the two parameters. It indirectly relates to `date` via 'daily' and to `include_timeseries` via 'series capped', but never explains accepted date formats or how the timeseries flag alters the response, leaving the agent to infer.

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 begins with a specific verb and resource ('Get Garmin daily average/max stress') and clearly specifies output contents ('per-band durations'), making it distinct from sibling tools focused on other metrics like sleep, HRV, or body battery.

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 context through the metric name 'stress' but does not explicitly state when to use this tool over siblings or mention any exclusions. No alternatives are named, leaving the agent to infer from the resource name.

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

get_training_contextA

Get recovery and preceding training anchored to date, with transparent comparisons.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It does disclose a behavioral trait beyond a plain fetch — 'transparent comparisons' signals that the tool performs analysis and surfaces the underlying values — and 'anchored to date' clarifies filtering behavior. However, it omits operational details such as what happens when the date parameter is null and how 'preceding training' is bounded (how far back, how many sessions).

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 12-word sentence with the primary content ('recovery and preceding training') front-loaded before the qualifiers. Every word earns its place, there is no filler, and it is not a tautological restatement of the tool name.

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?

The output schema covers return shape and the tool is a simple one-parameter read operation, which lowers the bar. Yet with no annotations, the null-date behavior, the comparison baseline, and routing among a crowded sibling set remain unstated, so an agent would still need to make assumptions before invoking it.

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 0%, so the description must compensate, and it does tie the only parameter 'date' to the core behavior via 'anchored to date.' It fails to state expected date format, timezone handling, or the semantics of null even though the schema defaults date to null, so an agent must infer what an omitted date yields.

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 a specific verb and resource: get 'recovery and preceding training anchored to date,' which is a composite scope that differentiates it from single-domain siblings like get_recovery or get_activities. However, 'with transparent comparisons' is vague about what is being compared against what, leaving some ambiguity about the tool's exact function.

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 composite scope ('recovery AND preceding training') implies a comparison-oriented use case, which offers situational context. But the description never states when not to use this tool or names alternatives such as get_recovery for recovery-only needs, leaving sibling routing to inference.

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

get_training_loadC

Get acute/chronic load, ratio/status, focus/targets, VO2 max, scores, acclimation.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

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

There are no annotations, so the description must bear the full behavioral disclosure burden. It only lists returned metric categories and gives a 'Get' verb; it does not explain date handling, what happens when date is omitted, units, or any other behavioral details.

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

Conciseness3/5

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

The description is a single sentence with no filler, so it is concise. However, the structure is a long slash-separated list of jargon ('acute/chronic', 'ratio/status', 'focus/targets') that is cryptic and harder to parse than necessary.

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?

Although an output schema exists, the description lacks enough context for correct invocation. It does not explain the optional date's role or differentiate this tool from the sibling readiness, recovery, and activity tools, leaving important selection and call-time behavior unclear.

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

Parameters2/5

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

The schema has one optional date parameter with 0% description coverage, and the tool description does not mention date at all. The parameter name 'date' and its default of null provide a minimal hint, but the description adds no meaning about format, default behavior, or how date filters the load metrics.

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 uses the verb 'Get' and names a resource ('training load') followed by a list of metric categories, so the general purpose is recognizable. However, it is an indiscriminate enumeration ('acute/chronic load, ratio/status, focus/targets, VO2 max, scores, acclimation') that does not distinguish this tool from closely related siblings like get_training_readiness or get_recovery.

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?

No usage guidance is provided. The description does not say when to use get_training_load versus alternatives, nor does it state any exclusions or conditions. An agent is left to guess which of the many overlapping health-metric tools is appropriate.

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

get_training_readinessC

Get Garmin training readiness, component percentages, and factor feedback.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

There are no annotations, so the description carries the full burden of behavioral disclosure. It only states that the tool gets readiness data; it does not reveal whether the date is required, what happens when no date is given, whether it returns data for multiple days, or any side effects. 'Get' implies read-only, but the description does not explicitly confirm this.

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?

The description is a single, efficient sentence that names the resource and key output components with no fluff. It loses a point because the extreme brevity omits necessary context about the date parameter, but the existing text is well-structured and 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 tool with one optional parameter and an output schema, the description provides a minimal but acceptable overview of the return value. However, it is incomplete for correct invocation: it does not explain the role of the date parameter or how this tool fits among the many similarly named readiness/recovery siblings.

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

Parameters2/5

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

The schema has 0% description coverage for the only parameter, 'date'. The description does not mention the date parameter at all, so the agent must infer formatting, meaning, and default behavior from the schema's title and default value alone. The description fails to compensate for the low schema coverage.

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 a specific verb and resource ('Get Garmin training readiness') and adds detail about the expected response contents ('component percentages, and factor feedback'). This distinguishes it from generic sibling tools like get_sleep or get_activities, though it does not explicitly contrast with get_recovery or get_body_battery.

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?

No guidance is provided about when to use this tool instead of siblings like get_recovery, get_body_battery, or get_daily_summary. The description does not mention whether it supports a specific date, how it relates to other readiness metrics, or what inputs should be supplied.

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

get_training_weekA

Summarize a Mon-Sun week; every total discloses how many activities reported the metric.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

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

There are no annotations, so the description carries the full behavioral burden. It discloses a non-obvious reporting trait: each total states the count of activities that reported the metric, protecting against misinterpretation of incomplete aggregates. It also pins down the week boundary (Mon-Sun).

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 no filler; the purpose is front-loaded and the reliability caveat is appended in a second clause. 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 one-optional-parameter tool with an output schema, the description covers the aggregation window and a metric caveat. The main gap is the undocumented default/null-date behavior, which the schema leaves unresolved. That gap is minor given the low complexity.

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

Parameters2/5

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

Schema coverage is 0%, and the description never mentions the single 'date' parameter, its format, or the meaning of null (default). The parameter name is self-explanatory, but the description does not compensate for the schema's lack of documentation. An agent must guess how to format the date and what a null value does.

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 ('Summarize') and resource ('a Mon-Sun week'), making the function's scope immediately clear. It contrasts implicitly with get_daily_summary by defining the weekly aggregation granularity, though it does not explicitly name any sibling.

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 'Mon-Sun' qualifier conveys that a provided date is interpreted within its calendar week, which is useful routing context. It implies this tool is for weekly rather than daily or single-metric summaries, but gives no explicit exclusions and names no alternatives.

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

get_training_zonesA

Get configured Garmin HR-zone and cycling power-zone floor thresholds.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are present, so the description carries the disclosure burden. It signals a non-mutating retrieval operation ('Get') and clarifies that the data source is the user's configured thresholds. It does not mention output shape or edge cases, but the output schema covers return structure, making this a minimally sufficient disclosure.

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 tight sentence with no filler, and the specific resource ('Garmin HR-zone and cycling power-zone floor thresholds') is front-loaded. 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 zero-parameter, read-only tool, the description covers what is returned and where the data comes from. The output schema covers return details, and sibling names help disambiguate intent. The only notable gap is usage guidance, which is minor given the tool's low complexity.

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 zero parameters, so there are no argument semantics to document. With no parameters, the baseline of 4 applies and the description does not need to compensate for schema gaps.

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 the verb 'Get' and a specific resource: 'configured Garmin HR-zone and cycling power-zone floor thresholds.' Unlike sibling tools, which return measured metrics like sleep or readiness, this targets stored configuration thresholds, making it readily distinguishable.

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?

No guidance is provided on when to use this tool versus siblings such as get_training_context or get_training_load. The description neither states use cases nor exclusions, leaving the agent to infer intent 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.

Tool Schema Changelog

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

  1. 2 tool updatesv0.2.0
    • Addedget_running_tolerance
    • Addedget_training_zones
  2. 17 tool updatesv0.1.0
    • First observedcompare_activities
    • First observedget_activities
    • First observedget_activity
    • First observedget_body_battery
    • First observedget_body_composition
    • First observedget_cycle
    • First observedget_daily_summary
    • First observedget_hrv
    • First observedget_recent_activities
    • First observedget_recovery
    • First observedget_recovery_trend
    • First observedget_sleep
    • First observedget_stress
    • First observedget_training_context
    • First observedget_training_load
    • First observedget_training_readiness
    • First observedget_training_week

TDQS

B3.1/5.0

Scored across 19 tools

Disambiguation2/5

Several tools share overlapping data: get_daily_summary, get_sleep, get_recovery, get_stress, and get_body_battery all surface similar health metrics, while get_recovery, get_training_readiness, get_training_context, and get_recovery_trend form a confusing recovery/readiness cluster. An agent would struggle to know which endpoint is authoritative for a given metric.

Naming Consistency4/5

The vast majority of tools follow a consistent get_<resource> snake_case pattern, making the set predictable. The only clear deviation is compare_activities, which uses a verb-noun structure instead of a get_ prefix, but this is a minor inconsistency.

Tool Count3/5

With 19 tools, the server sits in the slightly-heavy range for a data-retrieval API. Many are individually meaningful, but the recovery/readiness/trend cluster could likely be consolidated without losing capability.

Completeness5/5

The toolset provides broad coverage of Garmin health and training data: daily summaries, sleep, HRV, stress, body battery, activities, body composition, training load/zones/context, trends, and cycle data. No major dead-ends or obvious missing read operations are apparent for the stated domain.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers