Skip to main content
Glama

Garmin Personal MCP

Ask your AI about your Garmin data, on Garmin's official API.

PyPI CI Python GitHub stars License: MIT

Install in Cursor Install in VS Code Install in VS Code Insiders

Quickstart · Tools · Authentication · Changelog

Garmin Personal MCP is a free, open-source MCP server that connects your Garmin Connect account to Claude, Cursor, VS Code, or any other MCP client. Ask about last night's sleep, HRV trends, Body Battery, stress, training load, weight, or a specific run, all from your real Garmin account. It runs on Garmin's official Personal API with a revocable key, so it never needs your Garmin password, and it's read-only.

Published on PyPI as garmin-personal-mcp and in the official MCP Registry as io.github.Mason-Levyy/garmin-personal-mcp.

Unofficial project, official API. This isn't made by Garmin, but it only talks to Garmin's documented Personal API through Garmin's own Python client.

How is this different from other Garmin MCP servers?

Most Garmin MCP servers sign in with your Garmin password through the unofficial garminconnect library, which breaks whenever Garmin changes its login. In October 2026 Garmin opened a Personal API for individuals. This server uses it:

  • No password, no scraping: a revocable Personal API key you create in Garmin Connect, exchanged for short-lived tokens

  • The whole Personal API: every working endpoint in Garmin's reference has a tool, with every documented filter

  • Any date range: ranges longer than an endpoint allows (28 days for steps, 31 for sleep, and so on) are split into requests for you

  • Model-sized responses: all-day sample arrays are left out unless you ask for them

  • Read-only: the Personal API can't change your account, and neither can this server

Related MCP server: Garmin MCP Server

Quickstart

  1. Save your Personal API key (one-time; see Authentication):

    uvx garmin-personal-mcp auth
  2. Add the server to your client. The install buttons at the top do this in one click for Cursor and VS Code.

    Claude Code

    claude mcp add garmin -- uvx garmin-personal-mcp

    Or install it as a plugin, which asks for your key in place of step 1:

    /plugin install garmin-personal-mcp --marketplace Mason-Levyy/garmin-personal-mcp

    Claude Desktop (claude_desktop_config.json), Cursor (~/.cursor/mcp.json), Windsurf (~/.codeium/windsurf/mcp_config.json), and Cline (cline_mcp_settings.json) all take the same entry:

    {
      "mcpServers": {
        "garmin": {
          "command": "uvx",
          "args": ["garmin-personal-mcp"]
        }
      }
    }

    VS Code (or use the button above):

    code --add-mcp '{"name":"garmin","command":"uvx","args":["garmin-personal-mcp"]}'

    Codex CLI:

    codex mcp add garmin -- uvx garmin-personal-mcp

    Gemini CLI:

    gemini mcp add garmin uvx garmin-personal-mcp
  3. Ask it something: "how did I sleep last night?", "is my HRV trending down this month?", "compare my last three long runs".

Requires uv. Any MCP client that speaks stdio or streamable HTTP works, not just Claude.

Finding this useful? A ⭐ on GitHub helps other Garmin users find it.

Authentication

  1. Sign in to Garmin Connect on the web and open Settings → Personal API.

  2. Create a key and choose how long it lasts (30 days to a year). Garmin shows it once.

  3. Run garmin-personal-mcp auth and paste it at the hidden prompt. The server checks it with Garmin before saving it to ~/.config/garmin/connect-personal-api-key with owner-only permissions.

Where there's no terminal to prompt in (a script, or a shell an agent runs), pipe the key in instead, e.g. pbpaste | garmin-personal-mcp auth.

garmin-personal-mcp auth --check reports whether the saved key still works, without prompting. Garmin emails you about a week before a key expires: create a new one and run auth again. No restart is needed; the server reads the key on every call.

Instead of the key file you can set GARMIN_PERSONAL_API_KEY, which takes precedence. The key file and bearer-token cache are the same ones Garmin's gc-personal CLI uses, so a key saved by either works for both.

Tools

All tools take dates as YYYY-MM-DD. Range tools default to the 7 days ending today. Tools that return a list wrap it as {"results": [...]}.

Tool

What it returns

garmin_get_day

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

garmin_get_daily_summary

Every all-day wellness total for one date

garmin_get_daily_summaries

Daily summaries across a range (trends over weeks or months)

garmin_get_steps

Daily steps, distance, and goal

garmin_get_stress

Daily stress level and time in each stress band

garmin_get_hydration

Daily intake, goal, and sweat loss

garmin_get_body_battery

Daily charge/drain and the events behind it; chunks for intraday lows/highs

garmin_get_heart_rate

Resting/min/max HR, 7-day resting average, abnormal HR alerts; samples on request

garmin_get_spo2

Pulse ox averages, hourly averages, acclimation; readings on request

garmin_get_wellness_activities

Wellness activities with summary values and time in zones

garmin_get_sleep

One night in full: score, stages, timings, overnight vitals

garmin_get_sleep_summaries

Nightly sleep records across a range

garmin_get_hrv

One night of HRV with every reading

garmin_get_hrv_summaries

Nightly HRV, weekly average, baseline, and status across a range

garmin_get_weight

Daily weight summaries, range average, and adjacent weigh-ins; every weigh-in with include_all

garmin_get_weight_goals

Weight goals in effect and their target ranges

garmin_get_food_log

Garmin Connect nutrition log: foods, nutrients, goals, meals

garmin_search_activities

Activities with every filter Garmin supports (type, dates, distance, power, area, dives, ...)

garmin_get_activity

One activity in full, with splits

garmin_get_activity_workouts

The structured workout followed during an activity

garmin_download_activity

Save an activity's original file (ZIP with the .fit) on the server's machine

garmin_get_profile

Units, formats, time zone, and training-day preferences

garmin_get_heart_rate_zones

Zone floors per sport and the HRs they're based on

garmin_get_fitness_age

Fitness age, achievable fitness age, and its components

garmin_get_menstrual_cycle

Cycle phase, day, fertile window, and predictions

garmin_get_menstrual_day

One day's logged symptoms, flow, and cycle detail

Weights are in grams, distances in meters, and durations in seconds, as Garmin returns them.

Remote / HTTP mode

The default transport is stdio. For network clients:

garmin-personal-mcp --http --host 127.0.0.1 --port 8491

This serves streamable HTTP at /mcp. There is no built-in authentication. Never expose it to the internet. Bind to localhost and front it with something that authenticates for you: a VPN or tailnet (e.g. tailscale serve), an authenticating reverse proxy, or an OAuth-aware MCP gateway. Behind a proxy, pass --allowed-host <proxy hostname> (repeatable) so the DNS-rebinding check accepts its Host header.

Configuration

Variable

Purpose

Default

GARMIN_PERSONAL_API_KEY

Personal API key; overrides the saved key file

–

GARMIN_MCP_DOWNLOAD_DIR

Where garmin_download_activity saves files

~/Downloads/garmin (platform downloads dir)

Troubleshooting

  • "Garmin rejected the Personal API key": the key expired or was deleted. Create a new one and run garmin-personal-mcp auth.

  • "No usable Garmin Personal API key was found": run garmin-personal-mcp auth, or set GARMIN_PERSONAL_API_KEY in the client config.

  • {"no_data": ...}: Garmin has nothing for that date yet (today's HRV before you've slept, for example), or your device doesn't record that metric.

  • HTTP 400 on a long range: an endpoint without a documented limit rejected the range. Ask for a shorter one.

FAQ

Is this the official Garmin API? Yes. It uses Garmin's Personal API, which anyone with a Garmin Connect account can enable without applying, through Garmin's Apache-licensed Python client. The project itself is independent.

Can it change my Garmin data? No. The Personal API is read-only. The one tool that writes anything, garmin_download_activity, saves a file on your own machine.

Which MCP clients does it work with? Any client that runs a stdio or streamable HTTP server, including Claude Desktop, Claude Code, Cursor, Windsurf, Cline, and VS Code. AI coding agents can follow llms-install.md.

Where does my data go? The server talks only to Garmin. Your key and bearer token stay in ~/.config/garmin/. Tool results go to whichever MCP client and model you connect it to.

Can I use it for other people's accounts? No. Garmin's Personal API is for your own data. Apps serving other users need Garmin's business developer program.

How it works

  • garmin-personal-mcp auth saves the key; each call exchanges it for a bearer token through Garmin's PersonalApiAuthenticator, which caches the token until an hour before it expires. A token rejected early gets one retry with a fresh exchange.

  • Each tool maps to one endpoint on personal.connectapi.garmin.com (garmin_get_day combines several). Ranges longer than an endpoint's documented maximum are fetched in consecutive windows and concatenated.

  • Bulky per-minute sample arrays are dropped by default to keep responses readable for a model; include_samples or chunks bring them back.

Development

git clone https://github.com/Mason-Levyy/garmin-personal-mcp
cd garmin-personal-mcp
uv sync
uv run pytest

Tests run against synthetic fixtures; no account needed. Lint and formatting are enforced with ruff (uv run ruff check ., uv run ruff format .).

Contributing

Issues and pull requests are welcome, especially when Garmin adds endpoints to the Personal API. See CONTRIBUTING.md for setup, style, and the PR checklist, and SECURITY.md for how to report vulnerabilities privately. Release history is in CHANGELOG.md.

Support the project

If this server saves you time, please star the repo. Stars are how other Garmin users find it in GitHub search and MCP directories. Bug reports and endpoint requests are just as welcome in issues.

License

MIT. Garmin and Garmin Connect are trademarks of Garmin Ltd. or its subsidiaries; this project is not affiliated with or endorsed by Garmin.

Available Tools

26 tools
garmin_download_activityDownload activity fileA
Idempotent

Download an activity's original file (a ZIP, usually holding a .fit) and save it on the machine running this server as activity-<activity_id>.zip, replacing any earlier download. Returns the saved path, size, and the files inside.

activity_id: activityId from garmin_search_activities. directory: where to save (default: GARMIN_MCP_DOWNLOAD_DIR, else a garmin folder in the Downloads directory).

ParametersJSON Schema
NameRequiredDescriptionDefault
directoryNo
activity_idYes

TDQS

A4.3/5.0
Behavior4/5

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

Adds context annotations can't convey: the file is written to the server host's disk, an existing download is overwritten ('replacing any earlier download'), and the destination resolves through an env var then a Downloads fallback. This reconciles the readOnlyHint=false / idempotentHint=true pair by showing the write is local and repeatable. It does not mention auth/rate-limit exposure despite openWorldHint=true.

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 the action and artifact, then the save behavior, then per-parameter notes. Every sentence carries information; only the awkward line break mid-sentence ('(a ZIP, usually holding a .fit)\nand save it') slightly hurts readability.

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

Completeness5/5

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

With no output schema, the description supplies the return contract itself — saved path, size, and contained files. Combined with the overwrite and default-directory rules, an agent has everything needed to call it and interpret the result.

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

Parameters5/5

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

Schema coverage is 0%, so the description carries the full burden and does: activity_id is tied to its source tool, and directory is given both its precedence chain (explicit value → GARMIN_MCP_DOWNLOAD_DIR → Downloads/garmin) and its optional status. No parameter is left ambiguous.

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

Purpose5/5

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

States a specific verb and resource ('Download an activity's original file') and specifies the format ('a ZIP, usually holding a .fit'), which distinguishes it from garmin_get_activity (metadata) and garmin_search_activities (discovery). An agent can tell exactly what artifact this produces.

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?

Points at garmin_search_activities as the source of activity_id, which is genuine routing help. But it never explicitly contrasts with garmin_get_activity — the agent must infer that this is the tool for raw file retrieval versus JSON activity data.

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

garmin_get_activityGet activityA
Read-only

Full detail for one activity: summary metrics (distance, time, pace, HR, power, cadence, elevation, training effect, calories), device and location metadata, and split/lap summaries.

activity_id: activityId from garmin_search_activities or garmin_get_day.

ParametersJSON Schema
NameRequiredDescriptionDefault
activity_idYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the substantive value of disclosing exactly what data comes back — metrics, device/location metadata and lap splits — which is important since there is no output schema. It does not mention rate limits, auth prerequisites, or what happens if the activity_id is invalid, keeping it below a 5.

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 blocks: what is returned, then the one parameter with its source. Nothing is redundant, and the payload description is front-loaded before the parameter note.

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 must carry the return contract, and it does so at a reasonable level of granularity; with one required parameter, it also explains the ID's origin. Minor gaps remain (no note on units, missing-data behavior, or the download alternative), but nothing an agent needs in order to invoke it correctly is absent.

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%: the single parameter is only labeled 'Activity Id' with no explanation. The description compensates by defining activity_id and specifying where to obtain it from sibling tools, which is precisely the semantics an agent needs. It does not specify the expected type/format beyond the schema, so not a full 5.

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?

'Full detail for one activity' states a specific verb, resource and cardinality, and the enumeration of what's included (summary metrics, device/location metadata, split/lap summaries) makes the scope concrete. This reads clearly as the single-activity deep-dive counterpart to the list-returning garmin_search_activities, so an agent can tell them apart 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?

The description explicitly routes the agent on how to obtain the required input, naming garmin_search_activities and garmin_get_day as ID sources, which is real usage guidance. It stops short of stating when not to use this tool (e.g., garmin_download_activity for the raw file, garmin_get_activity_workouts for associated workouts), so there are no explicit exclusions.

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

garmin_get_activity_workoutsGet activity workoutsA
Read-only

The structured workout(s) followed during an activity, step by step with targets.

activity_id: activityId from garmin_search_activities or garmin_get_day.

ParametersJSON Schema
NameRequiredDescriptionDefault
activity_idYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered structurally. The description adds that results are step-by-step with targets, which is useful return-shape context, but says nothing about what happens for activities without a workout or about error/empty behavior.

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?

Very short and front-loaded: the purpose leads, then a practical hint about the single parameter. Slightly undermines itself by being so terse that return shape and edge cases are absent, but there is no 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 one-parameter read tool with no output schema, the description is minimal but serviceable — it conveys what the payload broadly contains (steps with targets). It stops short of describing the empty case or response structure, which is the main remaining gap.

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 carries the burden, and it does add real meaning: it tells the agent that activity_id must come from garmin_search_activities or garmin_get_day. It doesn't specify the integer type or formatting, but the provenance guidance is the meaningful addition.

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 and resource: returns the structured workout(s) followed during an activity, with the added detail 'step by step with targets'. It is distinguishable from other activity siblings by focusing on the workout structure rather than the activity summary, though it never explicitly contrasts with garmin_get_activity.

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 infers it applies when it wants workout structure for an activity. The one genuinely useful routing hint is the source of activity_id (garmin_search_activities or garmin_get_day), but there is no when-to-use/when-not guidance versus garmin_get_activity.

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

garmin_get_body_batteryGet body batteryA
Read-only

Daily Body Battery: amount charged and drained, plus the events that moved it (sleep, activities, stress) with Garmin's feedback.

start, end: YYYY-MM-DD inclusive (default: the 7 days ending today). Any length works; long ranges are fetched 31 days at a time. chunks: split each day into this many intervals (e.g. 24 for hourly) and include each interval's lowest and highest level. Omitted, the every-few-minutes readings are left out to keep the response small.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
startNo
chunksNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly and open-world access. The description adds meaningful behavior: default 7-day range, 31-day-at-a-time fetching for long ranges, and that omitting chunks leaves out fine-grained readings to keep responses small.

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

Conciseness5/5

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

Front-loads what the tool returns, then explains each parameter compactly. The date and chunks details are concise, with no filler or repetition.

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?

No output schema exists, but the description explains the included data and the response-size tradeoff from chunks, which is enough to invoke the tool correctly. Exact response fields and structures remain unspecified but are not essential to call semantics.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full parameter burden and does so well: it documents start/end format, inclusivity, default range, arbitrary range length with 31-day fetching, and chunks as intervals with lowest/highest levels and omitted raw readings.

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 and resource: daily Body Battery data with amount charged/drained and events that moved it. The Body Battery resource distinguishes it from siblings like get_stress or get_daily_summary, though it does not explicitly contrast them.

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?

Implies usage for retrieving Body Battery history and gives a useful default range plus a chunks use case. It never says when to choose this over related tools such as get_stress, get_day, or get_daily_summary.

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

garmin_get_daily_summariesGet daily summariesA
Read-only

Daily wellness summaries across a date range, grouped per day (movement, calories, heart rate, intensity minutes, stress, body battery, hydration, respiration, pulse ox, jet lag). About 1-2 KB per day, so for a long trend in one metric prefer garmin_get_steps, garmin_get_stress, or garmin_get_sleep_summaries.

start, end: YYYY-MM-DD inclusive (default: the 7 days ending today). Ranges over a year are fetched in yearly requests.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
startNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered; the description adds genuinely new behavior: payload size per day and the fact that ranges over a year are split into yearly requests, which matters for latency and result assembly. It does not say whether results are returned in order or what happens for days with no data.

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 tight blocks: scope and cost/routing first, parameter contract second. Every clause earns its place — the metric list defines coverage, the size estimate justifies the sibling redirect, and the yearly-batching note explains latency.

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 2-parameter read-only fetch with no output schema, the agent knows what it gets (per-day grouped wellness metrics), how big it is, how to bound it, and when to route elsewhere. Annotations cover the safety profile, so nothing material is left unresolved.

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% — both parameters are bare nullable strings with no format hint — so the description carries the full burden and does it reasonably: YYYY-MM-DD format, inclusive bounds, and a documented default of the 7 days ending today. It does not state whether start must precede end or what happens with an inverted or malformed range.

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 and resource — daily wellness summaries grouped per day across a date range — and enumerates the ten included metric groups (movement, calories, heart rate, stress, body battery, etc.), which is far beyond a restatement of the name. It does not disambiguate itself from the near-identically named sibling garmin_get_daily_summary (singular) or garmin_get_day, leaving a real selection ambiguity.

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 an explicit when-not-to-use rule with named alternatives: for long single-metric trends, prefer garmin_get_steps, garmin_get_stress, or garmin_get_sleep_summaries, justified by the ~1-2 KB/day cost. It stops short of saying when this tool beats garmin_get_daily_summary or garmin_get_day, which are the closest competing options.

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

garmin_get_daily_summaryGet daily summaryB
Read-only

Every all-day wellness total for one date: steps, distance, floors, total/active/BMR calories, intensity minutes, heart rate, stress, body battery, SpO2, respiration, and time active/sedentary/asleep.

date: YYYY-MM-DD (default: today).

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo

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 and openWorldHint=true, so the safety profile is covered. The description adds genuine value by naming the exact metric set returned and the today-default for the date, but says nothing about cost, rate limits, or what happens on dates with no recorded data.

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

Conciseness4/5

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

Two short blocks: the scope and metric inventory first, then the parameter note. The metric enumeration is long but earns its place by telling the agent exactly what data it will receive. No filler sentences.

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?

No output schema exists, so the description correctly compensates by listing the returned metrics, and it covers the single optional parameter's format and default. The remaining gap is routing guidance against the many overlapping wellness siblings, which is a usage rather than a calling-correctness issue.

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% for the lone date parameter, so the description carries the burden and does so: it specifies the YYYY-MM-DD format and states the default is today, which is meaningful since the schema shows only a null default. Missing only edge-case behavior such as timezone or out-of-range handling.

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-and-resource pair (all-day wellness totals for one date) and enumerates the metrics returned, which implicitly distinguishes it from single-metric siblings like garmin_get_steps or garmin_get_stress. It does not address the near-identical sibling garmin_get_daily_summaries (plural), which handles ranges, so the boundary is not explicitly drawn.

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 only usage cue is the default for the date parameter. With siblings such as garmin_get_day, garmin_get_daily_summaries, and per-metric tools like garmin_get_spo2, an agent gets no instruction on when to pick this aggregate over those narrower calls.

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

garmin_get_dayGet day overviewA
Read-only

One day at a glance: daily summary (steps, calories, intensity minutes, resting HR, stress, body battery), last night's sleep, HRV, body battery, stress, and the day's activities. A section Garmin has no data for yet comes back as {"error": ...} while the rest still load.

date: YYYY-MM-DD (default: today).

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo

TDQS

A3.9/5.0
Behavior4/5

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

Goes beyond the readOnlyHint/openWorldHint annotations by disclosing partial-failure semantics: a section Garmin has no data for returns {"error": ...} while the rest still load. That is exactly the kind of behavior an agent needs to avoid misreading a partial payload as total failure, though auth and rate-limit behavior against the external API are unmentioned.

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-loads the core concept, then the section inventory, then the failure caveat, then the parameter note — a sensible order. The comma-delimited metric list is dense but every item earns its place by telling the agent what will be returned.

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

Completeness5/5

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

With only one optional parameter, no output schema, and safety already covered by annotations, the description supplies the missing pieces: what the payload contains, the date format and default, and how missing sections surface. Little an agent needs in order to call this correctly is absent.

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 carry the load, and it does: it gives the 'YYYY-MM-DD' format and states the default is today. Minor friction remains because the schema declares default null rather than 'today', so the agent must trust the prose over the structured default.

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 verb and resource ('one day at a glance') and enumerates exactly which sections are returned: daily summary, sleep, HRV, body battery, stress, activities. It implicitly positions itself as the multi-metric aggregate against the single-metric siblings, but never names them, so the agent must infer the split.

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?

'One day at a glance' implies the broad-overview use case, which suggests preferring this over calling garmin_get_daily_summary, garmin_get_sleep and garmin_get_stress individually. There is no explicit when-to-use/when-not statement or named alternative, leaving the routing choice to inference.

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

garmin_get_fitness_ageGet fitness ageA
Read-only

Fitness age versus chronological age as of a date, the achievable fitness age, and the components behind it (vigorous days and minutes, resting heart rate, BMI or body fat %), or the reason none is available.

date: YYYY-MM-DD (default: today). full_history_scan: search all history for the latest value; false limits it to the 28 days before date.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
full_history_scanNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, and the description does not contradict them. It adds useful behavioral context beyond annotations: the returned component breakdown, the fallback 'reason none is available,' and the difference between scanning all history versus a 28-day window.

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 first sentence front-loads the tool's purpose and return content, followed by two compact parameter lines. Every sentence adds useful information with no repetition.

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 sufficiently explains what values are returned and what happens when no result exists. Minor gaps remain around authentication or exact output structure, but it is complete enough to invoke the tool correctly.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries full burden and does so well. It specifies the date format YYYY-MM-DD and default of today, and explains that full_history_scan=true searches all history for the latest value while false limits the search to 28 days before date.

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

Purpose5/5

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

States precisely what is returned: fitness age versus chronological age, achievable fitness age, its components, and the fallback reason when unavailable. This clearly distinguishes it from all sibling metric tools, none of which cover fitness age.

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 through 'as of a date' and the full_history_scan window behavior, but it never explicitly says when to use this tool or when not to. No alternatives are named, though none of the siblings overlap with this metric.

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

garmin_get_food_logGet food logA
Read-only

Foods logged in Garmin Connect's nutrition tracker for a day, with serving sizes, calories and nutrients consumed, nutrition goals, and a per-meal breakdown.

date: YYYY-MM-DD (default: today). meal_id: limit to one meal; ids appear in mealDetails of an unfiltered call. include_media: also return logged food photos.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
meal_idNo
include_goalsNo
include_mediaNo
include_nutritionNo

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the read-only, external-data profile is covered. The description adds useful behavioral context (per-meal breakdown, optional media) but is silent on the include_goals/include_nutrition defaults being true, on response size or rate limits, and on what happens when no food is logged. Incremental value over annotations, but not rich.

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?

Three compact lines, front-loaded with what the tool returns, then one line per parameter that needs clarification. No boilerplate, no restating of the tool name, every sentence 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 five parameters, no output schema, and zero schema descriptions, the definition covers the return contents and the tricky parameters well enough to call correctly. The remaining gap is the two undocumented boolean toggles (include_goals, include_nutrition), whose effect on the response is not stated.

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 carry the load, and it does for the two most error-prone parameters: date format 'YYYY-MM-DD' with today as default, and meal_id's provenance in mealDetails of an unfiltered call. include_media is explained, but include_goals and include_nutrition are left to be inferred from their names and schema defaults.

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 (foods logged in Garmin Connect's nutrition tracker) and scopes it to 'for a day', then enumerates the payload contents including serving sizes, calories, nutrients, goals, and per-meal breakdown. That is enough to separate it from hydration, weight, and daily-summary siblings by resource alone, though it never names an alternative 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?

There is real operational guidance: date defaults to today, meal_id limits to one meal and 'ids appear in mealDetails of an unfiltered call', which tells the agent to call without a meal_id first. However, there is no explicit when-to-use/when-not guidance versus siblings such as garmin_get_hydration or garmin_get_daily_summary, so usage is implied rather than stated.

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

garmin_get_heart_rateGet heart rateA
Read-only

Resting, minimum, and maximum heart rate for a day, the 7-day resting average, and any abnormal high/low heart rate alerts.

date: YYYY-MM-DD (default: today). include_samples: also return the all-day readings (large).

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
include_samplesNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so safety is covered; the description adds genuine behavioral context by enumerating returned metrics and warning that include_samples returns 'the all-day readings (large)', flagging a payload-size tradeoff. It stops short of noting timezone handling or how alerts are represented, but nothing contradicts 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.

Conciseness4/5

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

Front-loaded with the returned metrics, then two compact parameter lines — no filler. The terse param lines are slightly clipped but each 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?

With no output schema, the description usefully enumerates what comes back, and annotations cover the safety profile for this simple two-param read. An agent has enough to call it correctly; only edge details (timezone, sample granularity, alert semantics) are absent.

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 carry both parameters, and it does: date is documented as YYYY-MM-DD with default today, and include_samples is explained as also returning all-day readings at a size cost. Remaining gaps are minor (sample resolution, timezone basis for 'day').

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 exact resource payload: resting, min, max heart rate for a day, the 7-day resting average, and abnormal high/low alerts. That content is specific enough to separate it from siblings like garmin_get_hrv, garmin_get_stress, or garmin_get_daily_summary without opening the schema, though no sibling is named 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 by the data type — an agent infers to call it when it needs heart-rate metrics for a day. There is no explicit when-to-use vs. when-to-use-alternatives guidance (e.g., vs. garmin_get_heart_rate_zones or garmin_get_hrv) and no exclusions.

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

garmin_get_heart_rate_zonesGet heart rate zonesA
Read-only

Heart rate zone floors per sport, with the training method and the resting, max, and lactate threshold heart rates the zones were built on.

generate_defaults: return Garmin's default zones when none are configured.

ParametersJSON Schema
NameRequiredDescriptionDefault
generate_defaultsNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description usefully discloses what the response contains (zone floors, method, reference HRs), but says nothing about auth requirements, per-sport coverage limits, or behavior when generate_defaults is explicitly false.

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?

Two short sentences, front-loaded with what the tool returns before the parameter behavior. The mid-sentence line break is slightly awkward but nothing is wasted.

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 and a single optional param, the description covers the essential return content and the main parameter behavior. Missing only edge-case behavior for generate_defaults=false, which an agent could plausibly need.

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 carries the param burden and does so reasonably: it explains that generate_defaults returns Garmin's default zones when none are configured. It does not explain the false case or that the default is true, leaving a small 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 names the resource precisely ('heart rate zone floors per sport') and lists the accompanying data (training method, resting/max/lactate threshold HRs), which clearly separates it from garmin_get_heart_rate readings. It stops short of explicitly differentiating itself from siblings like garmin_get_profile or garmin_get_fitness_age, which may also surface related metrics.

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 generate_defaults sentence implies when that flag is useful ('when none are configured'), which is a mild usage cue, but there is no guidance on when to call this tool versus garmin_get_heart_rate or other wellness tools. Usage must be inferred.

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

garmin_get_hrvGet HRV nightA
Read-only

One night of heart-rate variability: the summary (last-night average, 5-minute high, weekly average, baseline band, status) plus every reading taken during sleep.

date: YYYY-MM-DD, the morning you woke up (default: today).

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds genuine value beyond that by enumerating what the payload contains (last-night average, 5-minute high, weekly average, baseline band, status, plus per-reading data), which tells the agent what it will get back. It does not mention volume or whether readings can be numerous.

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 short blocks, zero waste, with the core purpose front-loaded and the single parameter explained immediately after. Nothing redundant or padded.

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?

There is no output schema, and the description compensates by describing the returned summary fields and the per-reading series. For a one-parameter read tool this is nearly complete; only payload size/ordering behavior for the reading series is unstated.

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 carry the burden, and it does: it gives the format (YYYY-MM-DD), the exact semantic ('the morning you woke up'), and the default (today). Only a residual ambiguity like timezone handling is left unaddressed.

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 and scope: 'One night of heart-rate variability' with the summary metrics plus every sleep reading. The singular 'one night' implicitly distinguishes it from the plural garmin_get_hrv_summaries, but that sibling is never named, so the differentiation requires the agent to infer it from the name.

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 via 'one night' and the default-to-today behavior, but never states when to pick this over garmin_get_hrv_summaries or garmin_get_sleep, nor any prerequisites. Usage is inferable rather than explicit.

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

garmin_get_hrv_summariesGet HRV summariesA
Read-only

Nightly HRV summaries across a date range: last-night average, weekly average, baseline band, status, and Garmin's feedback.

start, end: YYYY-MM-DD inclusive (default: the 7 days ending today).

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
startNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered; the description adds real value by disclosing the return payload and the default 7-day-ending-today window. It says nothing about pagination, per-day gaps, or how Garmin's feedback/status is represented when a night is missing.

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, zero filler: the return shape is front-loaded and the parameter format follows. Every clause (inclusive bounds, default window) conveys information the agent cannot get elsewhere.

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 and 0% schema coverage, the description must explain both the payload and the parameters, and it does so adequately for a read-only two-param tool. The missing piece is sibling disambiguation from garmin_get_hrv, which is the main risk of a mis-invocation in this tool family.

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% and both parameters are bare nullable strings, so the description carries the full burden — and it does: it gives the YYYY-MM-DD format, states that the bounds are inclusive, and specifies the default window. Only timezone handling is left unstated, which keeps it short of a 5.

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 (nightly HRV summaries over a date range) and enumerates exactly what each entry contains: last-night average, weekly average, baseline band, status, and Garmin's feedback. An agent knows precisely what data comes back, though the description never distinguishes this from the sibling garmin_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 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 reach for this versus garmin_get_hrv, garmin_get_daily_summaries, or garmin_get_sleep_summaries — all plausible alternatives in a 24-tool list. The only usage-adjacent information is the default date window, which describes fallback behavior rather than selection criteria.

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

garmin_get_hydrationGet hydrationA
Read-only

Daily water intake, goal, estimated sweat loss, and intake logged during activities, all in mL.

start, end: YYYY-MM-DD inclusive (default: the 7 days ending today). Any length works; long ranges are fetched 31 days at a time.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
startNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so safety is covered; the description adds real value with units (mL), inclusive date semantics, and disclosure that long ranges are fetched 31 days at a time. It stops short of noting rate limits, auth requirements, or timezone handling for day boundaries.

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 short blocks: the payload first, then parameter semantics. No filler, no repetition of the tool name, and the default range is stated up front where an agent will see it.

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-required-parameter read tool with no output schema, the description supplies the return fields, units, default window, and fetch-chunking behavior. Only timezone/day-boundary semantics are missing, a minor gap for an end-of-range query.

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 carries the full burden and mostly does: it gives the YYYY-MM-DD format, states the range is inclusive, and defines the default (7 days ending today) for both start and end. It does not address how a partially supplied range or null values behave, which keeps it from a 5.

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 enumerates exactly which hydration metrics are returned (daily water intake, goal, estimated sweat loss, activity intake) and their unit (mL), which distinguishes it from siblings like garmin_get_food_log or garmin_get_weight. It lacks an explicit verb, but the resource 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 Guidelines3/5

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

It gives concrete context (default range of the last 7 days) but never says when to pick this over adjacent tools such as garmin_get_daily_summary, nor any exclusions or prerequisites. Usage is only implied by the resource name.

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

garmin_get_menstrual_cycleGet menstrual cycleA
Read-only

Menstrual cycle summary as of a date: current phase, day in cycle, days until the next phase, period length, fertile window, predicted ovulation and cycle length, and pregnancy details when tracking a pregnancy.

date: YYYY-MM-DD (default: today).

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo

TDQS

A4.1/5.0
Behavior4/5

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

The annotations already establish that this is a read-only, open-world operation. The description adds meaningful behavioral context by listing the returned fields, including pregnancy details when tracking a pregnancy, which is important because there is no output 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?

The description is compact and front-loaded: it starts with the core summary purpose, lists relevant returned fields, then documents the date parameter. It does not waste space on irrelevant 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 read-only getter with no output schema, the description provides enough output context for an agent to know what will be returned. It is slightly incomplete because it does not clarify sibling selection or how missing/no-tracking data is handled.

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

Parameters5/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 carry parameter meaning. It does so for the single optional date parameter by specifying the YYYY-MM-DD format and defaulting to today.

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 that this returns a menstrual cycle summary as of a date and enumerates the key fields returned. It is specific about the resource and scope, but it does not explicitly distinguish itself from the sibling garmin_get_menstrual_day.

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?

It implies usage by saying the summary is as of a date and that the date defaults to today. However, it gives no explicit guidance on when to use this tool versus garmin_get_menstrual_day or other wellness getters.

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

garmin_get_menstrual_dayGet menstrual cycle dayA
Read-only

One day in detail: logged symptoms, flow, mood, and other entries, that day's cycle summary, and weekly weight goal ranges during pregnancy.

date: YYYY-MM-DD (default: today). today: the reference date for predictions (default: today). reduced: return a lighter response. skip_baby_movement: leave out kick counts. include_analysis: add Garmin's cycle analysis.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
todayNo
reducedNo
include_analysisNo
skip_baby_movementNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful behavioral detail: it names the returned categories and explains that reduced returns a lighter response, skip_baby_movement removes kick counts, and include_analysis adds Garmin’s cycle analysis.

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 front-loaded with the return contents and then gives compact parameter notes. It is appropriately sized for a five-parameter tool with no schema descriptions, and no sentence is wasted.

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, five-parameter tool with no output schema and no schema descriptions, the description covers the returned data categories and every parameter. It could be more complete by explicitly routing between this tool and garmin_get_menstrual_cycle, but otherwise an agent has enough to call it 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 description coverage is 0%, so the description must compensate, and it does explain all five parameters. It gives the date format and default for date, clarifies that today is the reference date for predictions, and describes the three boolean flags, though “reduced: return a lighter response” remains somewhat vague.

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 that this tool retrieves one day of menstrual-cycle detail, listing symptoms, flow, mood, cycle summary, and pregnancy weight-goal ranges. The verb and resource are specific, but it does not explicitly distinguish this tool from the sibling garmin_get_menstrual_cycle.

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 “One day in detail” and by parameter defaults such as date and today, which suggest single-day lookup. However, the description never explicitly says when to choose this tool over garmin_get_menstrual_cycle or when not to use it.

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

garmin_get_profileGet profile settingsA
Read-only

Profile settings: display name, measurement system and display formats, time zone, hydration units and containers, and preferred training days. Check measurementSystem before converting units for the user.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

The readOnlyHint and openWorldHint annotations already cover the basic safety and external-data profile. The description adds useful context about returned profile fields and a unit-conversion caveat, but it does not discuss authentication, caching, rate limits, 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?

The definition is two compact sentences with no waste. The field list is front-loaded, and the final sentence adds a practical caveat that helps an agent use the returned measurement system correctly.

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 tool with no output schema, the description gives enough context by listing the main profile fields returned and warning about measurement units. It stops short of describing the full response structure or any error behavior, but the essential calling context is present.

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?

There are zero input parameters, so the baseline is 4. The description does not need to explain parameter semantics, and it correctly focuses on the returned profile data instead.

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 identifies the resource as profile settings and enumerates the key fields returned, such as display name, measurement system, time zone, and training days. It is distinguishable from sibling metric tools because it is explicitly about profile preferences rather than health or activity data, though it does not use an explicit retrieval verb.

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 provides one actionable usage instruction: check measurementSystem before converting units for the user. However, it does not explicitly say when to use this tool versus sibling profile-adjacent tools, nor does it state any exclusions or prerequisites.

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

garmin_get_sleepGet sleepA
Read-only

The full sleep record for the night ending on date: sleep score and its components, deep/light/REM/awake seconds, start and end times, overnight heart rate, SpO2, respiration, sleep stress, naps, and Garmin's feedback.

date: YYYY-MM-DD, the morning you woke up (default: today, i.e. last night).

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so safety is covered. The description adds real value beyond that: what the response contains (scores, stage seconds, HR, SpO2, respiration, naps, feedback) and the precise meaning of the date window ('night ending on date', 'the morning you woke up').

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 short blocks: return payload first, then the parameter definition. No filler sentences, and the most decision-relevant clause (which night) is front-loaded.

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 enumerates what comes back, and it fully specifies the single parameter. It stops short of covering edge behavior such as what is returned when no sleep was recorded, which would matter for a health-data tool.

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

Parameters5/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 carry the parameter. It does: format (YYYY-MM-DD), the semantic anchor (the morning you woke up, not the evening), and the default (today = last night). That is exactly the disambiguation an agent needs.

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 and resource: 'The full sleep record for the night ending on date,' and enumerates the contents. The word 'full' implicitly contrasts with garmin_get_sleep_summaries, but no sibling is named explicitly, so the differentiation is left partly to inference.

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 when-to-use / when-not guidance and no named alternative such as garmin_get_sleep_summaries. Usage is only implied by the 'full record for the night' framing and the date semantics.

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

garmin_get_sleep_summariesGet sleep summariesA
Read-only

Nightly sleep records across a date range, same fields as garmin_get_sleep. Use it for sleep trends.

start, end: YYYY-MM-DD inclusive (default: the 7 days ending today). Any length works; long ranges are fetched 31 days at a time.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
startNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so safety is covered; the description adds genuinely new behavior: the default window is the 7 days ending today and long ranges are silently fetched in 31-day chunks. It doesn't mention rate limits or result ordering, but the added paging behavior is the kind of detail an agent otherwise couldn't know.

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 short blocks: purpose first, parameter semantics second. Every clause carries information — defaults, format, inclusivity, and the paging rule — with 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?

For a 2-optional-param read tool with no output schema, the description covers defaults and range handling adequately; return shape is deferred to garmin_get_sleep ('same fields'), which assumes the agent knows that sibling. A one-line note on what each record contains would close the remaining gap.

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

Parameters5/5

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

Schema coverage is 0% and the bare 'string'/null params carry no meaning, so the description does the full job: format YYYY-MM-DD, inclusivity, default of the trailing 7 days, and that any range length is acceptable. Nothing needed to call the tool is left to guesswork.

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+resource: nightly sleep records across a date range, and explicitly relates itself to the sibling garmin_get_sleep by noting identical fields. The plural/range framing plus 'Use it for sleep trends' makes the distinction from the single-night sibling apparent 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?

'Use it for sleep trends' gives clear positive guidance on when to reach for this tool over the single-night getter. It stops short of an explicit when-not statement (e.g. 'for a single night use garmin_get_sleep'), leaving that to inference from the sibling reference.

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

garmin_get_spo2Get SpO2A
Read-only

Blood oxygen (pulse ox) for a day: average, lowest, latest, sleep average, 7-day average, hourly averages, and altitude acclimation.

date: YYYY-MM-DD (default: today). include_samples: also return every individual reading (large).

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
include_samplesNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful behavioral context by warning that include_samples returns every individual reading and is large, which helps an agent avoid unnecessarily heavy calls.

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 compact and front-loaded: the returned metrics come first, followed by concise parameter notes. Every sentence adds useful information with no 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 two-parameter read-only wellness query, the description is nearly complete: it enumerates the return metrics, explains both parameters, and warns about large sample payloads. It does not describe response structure, but no output schema exists and the metric list provides adequate orientation.

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, and it does: date is documented as YYYY-MM-DD with a default of today, and include_samples is explained as returning every individual reading, with a size warning. Both parameters are covered semantically.

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 resource and verb-like action: retrieves blood oxygen (pulse ox) for a day, listing the exact metrics returned. It is clearly distinguishable from siblings such as heart rate, HRV, and stress, though it does not explicitly name alternatives.

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?

Provides clear context with the date default and the include_samples option, but gives no explicit when-to-use/when-not-to-use guidance versus sibling wellness tools. Usage is implied rather than prescribed.

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

garmin_get_stepsGet stepsA
Read-only

Daily total steps, distance (meters), and step goal.

start, end: YYYY-MM-DD inclusive (default: the 7 days ending today). Any length works; long ranges are fetched 28 days at a time.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
startNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds real value beyond that: it discloses the returned fields and, importantly, that long ranges are fetched 28 days at a time, which explains latency and any internal chunking behavior the agent might otherwise misread as incomplete results.

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 paragraphs with no filler, and the payoff (what you get back) is front-loaded in the first line before parameter mechanics. Every sentence carries information an agent needs.

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 takes on the burden of naming the return fields (steps, distance in meters, goal). The one residual ambiguity is whether results are one aggregate record or a per-day series, since 'daily total steps' can be read either way.

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 carry the parameters — and it does, specifying YYYY-MM-DD format, inclusive semantics, an explicit default of the last 7 days, and unrestricted range length with 28-day fetching. It stops short of stating whether start/end may be omitted independently, so it doesn't fully close the 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 names the exact resource and fields returned: daily total steps, distance in meters, and step goal. It clearly separates this from heart-rate, sleep, and weight siblings. It does not, however, explicitly distinguish itself from close siblings like garmin_get_daily_summary or garmin_get_day, which likely also surface step data.

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?

It gives useful operational context — the default is the 7 days ending today, ranges are inclusive, and any length is accepted — which tells the agent how to call it. What it lacks is when-to-use guidance: it never says to prefer garmin_get_daily_summary for a full multi-metric day view or garmin_get_day for hourly breakdowns.

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

garmin_get_stressGet stressA
Read-only

Daily overall stress level (0-100) and seconds spent in high, medium, low, and rest stress.

start, end: YYYY-MM-DD inclusive (default: the 7 days ending today). Any length works; long ranges are fetched 28 days at a time.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
startNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, and the description adds genuine behavior not covered there: a 7-day default window and the fact that long ranges are fetched 28 days at a time. It stops short of noting rate limits or what happens for days with no stress data.

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

Conciseness4/5

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

Two short blocks, front-loaded with the returned data before parameter guidance; no filler sentences. Minor loss for the multi-line wrapping that makes the unit list slightly harder 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?

With no output schema, the description does the necessary work of naming the returned fields and units, and it documents both optional parameters. A note on empty/missing days or the response shape per day would close the remaining gap.

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 carries the burden and largely meets it: both start and end are given a format (YYYY-MM-DD), an inclusivity note, and a default. The chunked 28-day fetching behavior for long ranges is extra useful context beyond the bare 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?

States the resource and the exact payload: 'Daily overall stress level (0-100) and seconds spent in high, medium, low, and rest stress.' That is specific enough to distinguish it from siblings like garmin_get_body_battery or garmin_get_hrv, though it never explicitly contrasts with them.

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 by the returned content and the default window ('the 7 days ending today'). There is no statement of when to prefer this over garmin_get_daily_summary or garmin_get_body_battery, and no preconditions such as data availability or device requirement.

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

garmin_get_weightGet weightA
Read-only

Daily weight summaries over a range, the range average, and the nearest weigh-ins before and after it (handy when the range itself has none). Weights are in grams; body composition (BMI, body fat %, muscle and bone mass) appears when a smart scale recorded it.

start, end: YYYY-MM-DD inclusive (default: the 7 days ending today). include_all: list every weigh-in per day with its time and body composition, not just the latest.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
startNo
include_allNo

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 read-only, open-world operation, so the description is not burdened with safety disclosure. It adds valuable behavioral detail beyond annotations: weights are in grams, body composition appears only when a smart scale recorded it, and nearest weigh-ins are returned when the range has no data.

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 compact and front-loaded, leading with what the tool returns before covering units and parameter details. Every sentence adds useful information, and 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?

With no output schema and only sparse annotations, the description does a solid job covering purpose, units, conditional body composition, default date behavior, and include_all semantics. It could be slightly more complete by describing response structure or any range-size limitations, but it is sufficient for correct invocation.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden and does so well. It explains that start and end use inclusive YYYY-MM-DD format with a default of the 7 days ending today, and that include_all lists every weigh-in per day with time and body composition rather than just the latest.

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 scope: daily weight summaries over a range, the range average, and nearest weigh-ins before and after the range. It does not explicitly distinguish this tool from its sibling garmin_get_weight_goals, but the weight-summary framing makes the general purpose unambiguous.

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 gives useful context such as the default date range and when the nearest weigh-in fallback is handy, but it does not explain when to use this tool versus alternatives like garmin_get_weight_goals or other wellness tools. Usage is implied rather than explicitly guided.

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

garmin_get_weight_goalsGet weight goalsA
Read-only

Weight goals in effect during a date range and their target ranges.

start, end: YYYY-MM-DD inclusive (default: the 7 days ending today).

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
startNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered elsewhere. The description usefully adds that the range is inclusive and that the default is the 7 days ending today, but says nothing about ordering, whether multiple goals can overlap, or what an empty range returns.

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?

Two short sentences, front-loaded with the resource and return content, followed by a compact parameter note. The 'start, end:' label is terse but nothing is wasted.

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-optional-parameter read tool with no output schema and annotations covering safety, the description supplies enough: what is returned, the date format, inclusivity, and the default window. The main residual gap is behavior when only one bound is given.

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 carry the parameters — and it does, giving the YYYY-MM-DD format, the inclusive semantics, and the default window for both start and end. It does not clarify how the two interact if only one is supplied, which keeps it from a 5.

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 resource (weight goals) and a specific scope (goals in effect during a date range, with their target ranges), which distinguishes it from measurement-returning siblings such as garmin_get_weight. It does not explicitly name any sibling or contrast with it, so it falls short of a 5.

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 phrase 'in effect during a date range' plus the default window, which tells the agent that omitting dates yields the last 7 days. There is no explicit when-to-use versus garmin_get_weight or when-not guidance, so this is only minimum-viable routing information.

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

garmin_get_wellness_activitiesGet wellness activitiesA
Read-only

Wellness activities recorded by the device, each with its type, start and end time, per-metric summary values, and time in zones. Regular workouts like runs and rides are in garmin_search_activities instead.

start, end: YYYY-MM-DD inclusive (default: the 7 days ending today).

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
startNo

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds value by describing the return record shape (per-metric summary values, time in zones) and the default date window, but says nothing about result volume, pagination, or behavior for devices with no wellness activities — which matters for an open-world read tool.

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 return-value description is front-loaded and the sibling exclusion follows immediately, which is the right ordering. Slightly wasteful: the trailing parameter note sits after a line break in a separate block rather than being integrated, and 'Regular workouts like runs and rides are in...' is a bit wordy.

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 summarizing the returned fields, and it covers both optional parameters and the sibling boundary. Complete enough to call correctly; only edge-case behavior (empty results, date range limits) is absent, which is minor for a read-only lookup.

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 carries the full burden and mostly delivers: 'start, end: YYYY-MM-DD inclusive (default: the 7 days ending today)' supplies format, inclusivity, and default semantics that the bare anyOf string schema lacks. Only the timezone basis for 'today' and invalid-format handling are unstated.

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

Purpose5/5

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

States a specific verb and resource ('Wellness activities recorded by the device') and enumerates what each record contains: type, start/end time, per-metric summaries, time in zones. It also names the sibling that handles the confusable case (runs/rides -> garmin_search_activities), so an agent can disambiguate without opening the 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?

Explicitly routes regular workouts to garmin_search_activities, which is the main selection ambiguity. However, it gives no guidance on when to prefer this over the many daily-summary siblings (garmin_get_day, garmin_get_daily_summary, etc.), so a portion of the routing decision is left implicit.

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

garmin_search_activitiesSearch activitiesA
Read-only

Recorded activities (runs, rides, swims, strength, dives, ...), newest first, with name, type, start time, distance, duration, pace/speed, HR, power, cadence, calories, elevation, and training effect. Pass an activityId to garmin_get_activity for splits and full detail.

All filters are optional and combine: start, end: YYYY-MM-DD, by the activity's local start date. search: text in the activity name or description. activity_type: parent type key, e.g. running, cycling, swimming, strength_training, hiking, walking. activity_subtype: a child key such as trail_running or indoor_cycling. excluded_activity_subtypes: child keys to leave out. event_type: race, training, recreation, fitness, specialEvent, or uncategorized. favorite: true for favorites only, false for non-favorites. exclude_children: hide individual legs of multisport activities. sort_by: a field such as distance, duration, or name (default: start time). sort_order: asc or desc (default desc). min_/max_distance (meters), min_/max_duration (timer seconds), min_/max_elapsed_duration (seconds including pauses), min_/max_elevation (gain, meters), min_avg_power (watts). north, south, east, west: a bounding box in decimal degrees around the start location; give all four or none. Dives: min_/max_max_depth (centimeters), deco_dive, min_/max_bottom_time (seconds). required_fields: activity fields that must be present, e.g. avgPower. limit, offset: page through results (each activity is about 3-4 KB).

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
eastNo
westNo
limitNo
northNo
southNo
startNo
offsetNo
searchNo
sort_byNo
favoriteNo
deco_diveNo
event_typeNo
sort_orderNo
max_distanceNo
max_durationNo
min_distanceNo
min_durationNo
activity_typeNo
max_elevationNo
max_max_depthNo
min_avg_powerNo
min_elevationNo
min_max_depthNo
max_bottom_timeNo
min_bottom_timeNo
required_fieldsNo
activity_subtypeNo
exclude_childrenNo
max_elapsed_durationNo
min_elapsed_durationNo
excluded_activity_subtypesNo

TDQS

A4.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered; the description adds real context on top: newest-first ordering, per-activity payload size (~3-4 KB) for pagination planning, units for every numeric filter, and the multisport exclude_children behavior. It stops short of covering any rate limits or auth requirements, so a 4 rather than a 5.

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?

Roughly a dozen terse lines that map one-to-one onto 32 parameters, front-loaded with the identity of the resource and the handoff to garmin_get_activity. Dense but zero filler; nothing repeats the schema's titles without adding information.

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

Completeness5/5

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

With 32 optional parameters, no output schema, and 0% schema description coverage, the description nevertheless states the return fields, result ordering, and paging mechanism. An agent could invoke this correctly on the first try without further documentation.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden and does: it explains units (meters, timer seconds vs elapsed seconds, centimeters), the parent/child key distinction for activity_type vs activity_subtype, valid event_type values, and defaults for sort_order, favorite, and exclude_children. This is meaningfully more than the schema's bare titles.

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?

Opens with a specific verb+resource and enumerates what each result carries (name, type, distance, pace, HR, power, training effect). It also routes detail-seeking callers to garmin_get_activity, so it is distinguishable from the closest sibling 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 Guidelines5/5

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

States that all filters are optional and combine, gives the explicit alternative ('Pass an activityId to garmin_get_activity for splits and full detail'), and specifies defaults (sort by start time, desc) and the all-four-or-none bounding-box rule. There is no inference required to pick this tool over a sibling.

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. 26 tool updatesv0.1.1
    • First observedgarmin_download_activity
    • First observedgarmin_get_activity
    • First observedgarmin_get_activity_workouts
    • First observedgarmin_get_body_battery
    • First observedgarmin_get_daily_summaries
    • First observedgarmin_get_daily_summary
    • First observedgarmin_get_day
    • First observedgarmin_get_fitness_age
    • First observedgarmin_get_food_log
    • First observedgarmin_get_heart_rate
    • First observedgarmin_get_heart_rate_zones
    • First observedgarmin_get_hrv
    • First observedgarmin_get_hrv_summaries
    • First observedgarmin_get_hydration
    • First observedgarmin_get_menstrual_cycle
    • First observedgarmin_get_menstrual_day
    • First observedgarmin_get_profile
    • First observedgarmin_get_sleep
    • First observedgarmin_get_sleep_summaries
    • First observedgarmin_get_spo2
    • First observedgarmin_get_steps
    • First observedgarmin_get_stress
    • First observedgarmin_get_weight
    • First observedgarmin_get_weight_goals
    • First observedgarmin_get_wellness_activities
    • First observedgarmin_search_activities

TDQS

A3.9/5.0

Scored across 26 tools

Disambiguation4/5

Most tools target a clearly distinct data type (steps, stress, hydration, sleep, HRV, weight, activities), and the single-vs-range pairs (get_hrv/summaries, get_sleep/summaries) are a clear, intentional pattern. The main ambiguity is garmin_get_day, an aggregate that overlaps with get_daily_summary, get_sleep, get_hrv, get_body_battery, and get_stress, plus get_activity vs get_activity_workouts, but descriptions clarify these differences.

Naming Consistency5/5

All tools follow a consistent garmin_<verb>_<noun> pattern (get_*, search_*, download_*), with verbs that match their actions predictably. There is no mixing of camelCase/snake_case or arbitrary naming.

Tool Count3/5

26 tools cover a genuinely broad domain (sleep, HRV, stress, body battery, weight, food, activities, cycle tracking, profile), so each largely earns its place. However, it sits just over the heavy threshold, and the per-metric range tools partly duplicate garmin_get_daily_summaries, suggesting some consolidation is possible.

Completeness4/5

The surface is comprehensive for a read-only personal-health assistant: wellness metrics, sleep/HRV, activities with detail/download/workouts, weight and goals, nutrition, profile, zones, fitness age, and cycle tracking are all covered. Minor gaps remain (no dedicated training-status/readiness or VO2 max tool, and no write/log operations), but core workflows have no dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers