Zone Two
Provides tools for accessing and managing Garmin Connect data, including activities, sleep, HRV, workouts, and body composition, allowing AI agents to query and plan training.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Zone TwoHow was my sleep and HRV last night?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Zone Two
Your training log, in conversation. An MCP server that reads your own Garmin Connect data — sleep, HRV, training readiness, activities, body composition — so Claude can answer questions about it directly.
zonetwo.vercel.app · not affiliated with Garmin.
Authentication, and the caveat
Garmin's official Health API is only issued under a commercial partner
agreement, so this uses the same private endpoints the Garmin Connect app does,
via garminconnect. That
works well for your own account and is what every Garmin integration of this
kind does, but it is unsupported by Garmin: endpoints can change without notice,
and aggressive polling can get an account rate-limited.
You log in once, interactively. Credentials are exchanged for OAuth tokens that are cached on disk and last about a year; the server itself never sees a password and never logs in. That split is deliberate — MFA prompts cannot be answered over an MCP stdio connection, so a server that tried to log in would just hang.
Related MCP server: GC-MCP
Install (Claude Desktop)
Download zonetwo.mcpb from zonetwo.vercel.app or the latest release, and open it. Claude Desktop shows an install dialog asking for your Garmin email and password. Nothing else is needed — no Python, no terminal, no config files.
If your account uses two-step verification, Garmin emails you a code the first time Claude reads your data. Paste it into the conversation and Claude will finish signing in. The code lasts 30 minutes, and the saved token then keeps you signed in for about a year.
Your password is used once, to obtain that token. It is stored by Claude Desktop's own configuration, not by this server, and is only re-used if the token is ever rejected.
Setup (from source)
Requires uv and Python 3.11+.
git clone https://github.com/alchemist-s/zonetwo.git
cd zonetwo
uv sync
uv run zonetwo login # prompts for email, password, and MFA code if enabled
uv run zonetwo status # confirms the tokens worklogin must run in a real terminal — it prompts for a password and, if your
account has MFA, a code. It cannot run through a non-interactive shell (such as
Claude Code's ! prefix), and says so rather than failing with a traceback.
With MFA off, credentials can come from the environment instead:
GARMIN_EMAIL=you@example.com GARMIN_PASSWORD=... uv run zonetwo loginGarmin rate-limits login attempts by IP and can answer 429 on the first
strategy the client tries. The library falls back across several; if the whole
attempt fails that way, wait a few minutes rather than retrying immediately.
Tokens land in ~/.garminconnect (override with GARMINTOKENS), written
0600 in a 0700 directory.
Wire it into Claude Code
claude mcp add zonetwo --scope user -- uv --directory /absolute/path/to/zonetwo run zonetwoUse an absolute path — the stored config does not expand ~. --scope user
makes the server available in every project; without it the default local
scope binds it to whichever directory you ran the command from.
Wire it into Claude Desktop
In ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"garmin": {
"command": "uv",
"args": ["--directory", "/absolute/path/to/zonetwo", "run", "zonetwo"]
}
}
}If uv is not on the launcher's PATH, use its absolute path — which uv.
Tools
Dates accept YYYY-MM-DD, today, yesterday, or -7d. Omitting a date means
today; omitting a range means the last seven days.
Tool | What it returns |
| Weekly volume, longest run and pace over N weeks — the input for a plan |
| Build a structured session (intervals, pace targets) and optionally schedule it |
| Put an existing workout on a date |
| What's on the calendar this month |
| Take a session off the calendar, keeping the workout |
| Delete a saved workout (plans only — never recorded activities) |
| Workouts saved on the account |
| Activities in a date range as CSV |
| Sleep, HRV, stress, readiness, Body Battery and daily totals in one call |
| Account name and unit preferences |
| Registered devices and last sync |
| Steps, calories, floors, stress, body battery for a day |
| Stages, sleep score, overnight SpO2 and HRV |
| Resting/min/max plus daily average |
| Overnight HRV against your baseline |
| Time spent in each stress band |
| Charge and drain per day over a range |
| Daily totals, or 15-minute buckets via |
| Pulse ox and breathing rate |
| Moderate and vigorous minutes |
| Readiness score and its contributing factors |
| Status, acute/chronic load balance, VO2 max |
| VO2 max, fitness age, heat/altitude acclimation |
| Predicted 5K / 10K / half / marathon times |
| PRs by activity type |
| Recent activities, newest first |
| Activities in a date range |
| The most recent activity |
| One activity in detail ( |
| Per-lap splits |
| Weather during an activity |
| Weigh-ins and body composition |
| Any Garmin API path, for what the above do not cover |
Units travel in the field name
Garmin reports distances in metres, durations in seconds, speeds in metres per
second and body mass in grams, all unlabelled. A bare "weight": 74500
reads as kilograms to anything summarising it, and "averageSpeed": 2.75 reads
as km/h. So fields are renamed to carry their unit — distanceMeters,
durationSeconds, averageSpeedMetersPerSecond, weightKg — and grams are
converted, because that one is wrong rather than merely ambiguous. Foot-based
activities also get a derived pace ("5:59 min/km"), which is the number a
runner actually reads.
Rate limits
Garmin answers 429 rather than queuing, per IP. Calls are capped at three in
flight and retried with exponential backoff and jitter; the semaphore is
released before sleeping, so one throttled call does not stall unrelated ones.
A 429 that survives the retry budget reaches the caller as a message saying to
wait, not as a generic failure.
Why the responses are trimmed
Garmin's payloads are built for a dashboard: one night of sleep carries
thousands of per-minute samples, and a 20-activity list runs past 100 kB of
mostly-null fields. Every tool returns a compact projection and keeps the raw
payload behind raw=true. Anything still over ~60 kB comes back as an explicit
truncated marker rather than cut-off JSON — truncated JSON reads as complete
data that happens to end early, and gets summarised as fact.
What you get depends on your watch
Nothing here is tied to a particular account — log in with yours and it works.
But Garmin computes different metrics on different hardware, and the API returns
an empty response rather than an error for the ones your device does not
support. On a Venu 3, for instance, garmin_training_readiness returns a
literal [] and garmin_training_status comes back with every field null:
those are Forerunner/Fenix features. zonetwo check reports that as none
rather than ok, so you can tell "my watch doesn't do this" from "this is
broken".
What it may change
Two kinds of write, with different rules, because they carry different risk.
Plans — creating, scheduling and unscheduling workouts — are always available. They are additive, reversible, and the reason the server exists. Deleting a saved workout is allowed for the same reason: a plan is a draft.
Records — renaming an activity, logging weight or hydration — are opt-in
via ZONETWO_ENABLE_WRITES=1, because they edit history rather than intent.
Recorded activities can never be deleted. No such tool exists at any setting. Plans are drafts; history is history.
Writing workouts
garmin_create_workout takes steps a model can plausibly write, and translates
them into Garmin's nested format:
{
"name": "6 x 800m",
"steps": [
{"kind": "warmup", "length": "10min"},
{"repeat": 6, "steps": [
{"kind": "interval", "length": "800m", "pace": "4:30-4:20"},
{"kind": "recovery", "length": "90s"}
]},
{"kind": "cooldown", "length": "10min"}
],
"schedule_date": "2026-09-25"
}Lengths are distances (800m, 5km, 3mi) or times (10min, 90s, 1h);
min is parsed before m, so a ten minute warmup is never ten metres. Paces
are minutes per kilometre and become the speed bands Garmin expects.
Privacy
Everything runs on your own computer. Requests go straight from your machine to Garmin: there is no server operated by the author, no telemetry, no analytics and no error reporting.
Your password is used once, to obtain an access token. The token is saved at
~/.garminconnect (mode 0600 inside a 0700 directory) and the password is
not used again unless that token is rejected — after about a year, or if you
change your Garmin password. The password is never written to disk by this
server, never logged, and goes nowhere except Garmin's own sign-in service.
Your health data is fetched on demand and never cached. Note that anything you ask about becomes part of your Claude conversation, which Anthropic processes under their privacy policy.
Scope. Read-only unless GARMIN_MCP_ENABLE_WRITES=1 (or the equivalent
install option). Even then it can only rename an activity and record weight or
hydration — no tool for deleting anything exists in this server.
Removing it. Uninstall the extension, delete ~/.garminconnect, or change
your Garmin password to invalidate the token from Garmin's side.
Not intended for use by anyone under 16.
Troubleshooting
"No Garmin tokens…" — run
zonetwo login.Tokens rejected — they expire after about a year, and a password change invalidates them.
zonetwo login --force.Rate-limited — Garmin throttles per account. Wait a few minutes; avoid looping over long date ranges a day at a time.
Today's numbers look wrong — Garmin only has what the watch last synced to your phone.
China accounts —
zonetwo login --china.
Testing
Four levels, cheapest first.
1. Offline suite — no account, no network.
uv run pytestRuns against a stub shaped like real Garmin payloads. Covers date parsing, response shaping, every tool's projection logic, and the error paths.
2. Live smoke test — one command, hits your real account.
uv run zonetwo login # once
uv run zonetwo checkcheck calls every read-only tool through the real MCP dispatch path and
prints one line each:
garmin_sleep ok {"date": "2026-09-20", "sleepTimeSeconds": 27000, …}
garmin_hrv none (no data for this date)
garmin_activity_weather FAIL Garmin returned 500
23/24 tools responded (1 with no data), 0 failed.none is not a failure — it means your device does not record that metric, or
has not synced it for that date. Use --date 2026-09-19 to test against a day
that has definitely synced; today is often partial.
3. MCP Inspector — poke individual tools in a browser.
uv run mcp dev src/zonetwo/server.py:mcp --with-editable .Opens a UI where you can list tools, read their schemas, and call them with
your own arguments. Needs npx. The --with-editable . matters: the Inspector
runs the server in its own environment, which otherwise lacks garminconnect.
4. End to end in Claude Code.
claude mcp add zonetwo --scope user -- uv --directory /absolute/path/to/zonetwo run zonetwo
claude mcp list # should show garmin as connectedThen ask something that needs real data — "how did I sleep last night?", "what was my longest run this month?", "is my HRV trending down?" — and check the numbers against the Garmin Connect app.
To test the write tools, add -e GARMIN_MCP_ENABLE_WRITES=1 to the
claude mcp add command.
Available Tools
35 toolsgarmin_activitiesBRead-only
Most recent activities, newest first. activity_type filters e.g. running, cycling.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| activity_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful ordering context ('newest first') and filter behavior, but it does not clarify pagination semantics or what happens with a null activity_type. It does not contradict 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, front-loading the core behavior ('Most recent activities, newest first') and then adding the filter detail. There is no redundant or filler content; every phrase contributes meaningful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with only 3 simple parameters and an output schema, the description covers the basic operation but omits sibling differentiation and pagination behavior. Given the large sibling family, the lack of guidance about when to use this versus activities_by_date or last_activity makes the context incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only adds meaning to activity_type with examples ('running, cycling'), while limit and offset are left entirely to their names and defaults. The description does not explain that limit controls page size, offset enables pagination, or that activity_type null means no filtering.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource as 'activities' and states the ordering 'newest first', which clearly conveys a list of recent activities. It does not use an explicit verb like 'list' or 'retrieve', but the intent is understandable. The plural 'activities' and the filter hint help distinguish it from singular garmin_last_activity, though it doesn't explicitly differentiate from garmin_activities_by_date.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not state when to use this tool versus alternatives such as garmin_last_activity or garmin_activities_by_date. It only says what it returns and mentions activity_type filtering, leaving the agent to infer from sibling names. There are no exclusion conditions or alternative routing hints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_activities_by_dateARead-only
Activities within a date range (default: last 7 days), oldest first.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| start | No | ||
| activity_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already convey readOnlyHint and openWorldHint, so the bar is lower. The description adds genuine behavioral detail: default of last 7 days when no range is given, and oldest-first ordering. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence delivers the core behavior with no filler. Every word earns its place, and the key details, default window and sort order, are presented efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers default range and ordering, which is helpful, but a date-range listing tool still leaves critical invocation details undefined: the expected date format and the role of the activity_type parameter. The presence of an output schema helps for return values, but parameter semantics remain incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0%, the description needed to explain start, end, and activity_type, but it only mentions 'date range' without specifying date format or inclusive/exclusive behavior. The property names are somewhat self-explanatory, but the description adds no meaning beyond them and ignores activity_type entirely.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (activities) and the primary criterion (date range), and adds useful specifics: default last 7 days and oldest-first ordering. This differentiates it from garmin_last_activity and garmin_activity, though the verb is implicit and it does not explicitly distinguish itself from the broader garmin_activities sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when a date-bounded list of activities is needed relaunch. However, it does not provide explicit guidance on choosing this over the similar siblings like garmin_activities, garmin_last_activity, or garmin_activity, and it offers no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_activityCRead-only
One activity in detail. raw=true returns the full payload including chart samples.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | ||
| activity_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and openWorldHint=true. The description does not contradict these; it implies a read operation, aligning with readOnlyHint. However, it adds minimal behavioral detail: it mentions 'raw=true returns the full payload including chart samples', which hints at the response format and the effect of the raw parameter. But it does not disclose what the default response omits, nor does it explain the extensive payload or rate-limits. Given annotations already cover the safety profile, a 3 is appropriate as the description adds some value but not deep transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short (two clauses) and front-loads the core purpose. It is concise, with no filler words. However, it might be considered under-specified rather than concise, but for the length it has, every word is used efficiently. The structure is simple and to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (as indicated by 'Has output schema: true'), the description does not need to explain return values. However, the description is minimal and does not cover key aspects like how to get the activity_id, what the default response excludes, or when to use raw vs non-raw. With 34 sibling tools, there is a need for more context to differentiate. The lack of parameter descriptions in the schema increases the burden on the description, which it does not fully meet, but the output schema and annotations help. Thus, a 3 is fair.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must clarify parameter semantics. The description only mentions 'raw=true' and 'full payload', but does not explain what activity_id is or what format it expects. The name 'activity_id' is self-explanatory to some extent, but the description does not elaborate on where the ID comes from or how to obtain it. The raw parameter's semantics are partially clarified (returns full payload), but the default behavior is not described. This is a clear gap given the schema provides no descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'One activity in detail' which conveys the basic purpose (fetching a single activity details), but it is vague about the exact resource and scope. It does not explicitly mention that it requires an activity_id (though the schema indicates it) nor does it differentiate from sibling tools like garmin_activities or garmin_last_activity. The description is a short sentence that lacks a specific verb like 'Retrieves' and does not clarify what makes this tool distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention, for example, that this should be used after getting a list of activities from garmin_activities, nor does it explain the trade-off between raw=true and default behavior. There is no implicit or explicit context that helps an agent decide between this and garmin_activity_splits or garmin_activity_weather. This is a significant gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_activity_splitsBRead-only
Per-lap splits for an activity.
| Name | Required | Description | Default |
|---|---|---|---|
| activity_id | Yes |
TDQS
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 that the result is per-lap data, but it does not explain split units, pagination, or behavior when an activity has no splits. This is acceptable for a simple read-only tool but not richly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short phrase with no filler or repetition. It front-loads the core concept and earns its place, though it could arguably be a complete sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only tool, the description plus schema is minimally workable. However, there is no output schema and no mention of what a split contains or what happens when no splits exist, leaving the agent to infer the return shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only gives the parameter name 'activity_id' with type string and zero schema description coverage. The description implicitly ties that parameter to a Garmin activity, but it does not clarify expected format or value origin. The parameter is self-explanatory enough to keep this at a baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource and scope: per-lap splits and an activity. It is distinct from sibling tools like garmin_activity or garmin_activity_weatherhol, but it lacks an explicit verb such as 'retrieve' or 'get', so it is clear rather than fully action-oriented.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool instead of related tools such as garmin_activity or garmin_activities_by_date. The description neither suggests prerequisites nor rules out alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_activity_weatherCRead-only
Weather recorded during an activity.
| Name | Required | Description | Default |
|---|---|---|---|
| activity_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description adds no behavioral detail beyond those structured hints. It does not mention what happens when weather data is unavailable, whether the activity must already exist, or any other runtime behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, but this is under-specification rather than deliberate conciseness. It front-loads the subject but omits the action and contextual guidance that would make the sentence informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although an output schema exists and can describe return values, the description fails to explain the relationship between activity_id and the weather data or when an agent should call this tool. For a single-parameter read-only tool, a bit more context is still expected.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, leaving the description to compensate. The phrase 'during an activity' only weakly suggests that activity_id refers to a Garmin activity, but it does not specify the expected format, source, or any constraints beyond the schema's required marker.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is a noun phrase that essentially restates the tool name ('Weather recorded during an activity'), lacking an explicit verb indicating whether the tool retrieves, returns, or records weather. It does not clearly distinguish the tool from siblings like garmin_activity or garmin_activity_splits beyond the subject matter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives such as garmin_activity, garmin_activities_by_date, or garmin_activity_splits. No prerequisites, exclusions, or conditions are stated, so an agent must guess the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_api_getARead-only
Call any Garmin Connect API path directly (read-only GET).
For endpoints the dedicated tools do not cover. Paths look like '/usersummary-service/usersummary/daily/{displayName}?calendarDate=2026-09-19'. Prefer a dedicated tool when one exists — this returns unshaped payloads.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the description adds the useful caveat that it 'returns unshaped payloads,' which goes beyond the structured annotations. It doesn't mention auth or rate limits, but for a raw API accessor this is acceptable given the openWorldHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no fluff. The primary purpose is front-loaded, the usage rule is explicit, and the example is embedded naturally. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a fallback API accessor with no output schema, the description covers the essentials: when to use it, what the path looks like, and what to expect in return. It doesn't address error handling or parameter encoding, but given the tool's nature and the openWorldHint, these are minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema gives zero description for the single 'path' parameter, so the description must compensate. It provides an example path with placeholders and query string, giving concrete meaning to the parameter. While it could enumerate more path variants, the example suffices for a generic tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it calls any Garmin Connect API path directly, specifies read-only GET, and scopes it to endpoints not covered by dedicated tools. The example path further clarifies the resource format. This strongly distinguishes it from the many sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Prefer a dedicated tool when one exists' and defines when to use this tool: for endpoints the dedicated tools do not cover. This gives unambiguous selection criteria relative to the 34 siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_body_batteryARead-only
Body Battery charge and drain per day over a date range (default: last 7 days).
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| start | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, covering that this is a read operation with external data. The description adds the behavioral detail that it returns per-day charge and drain over a range, which is useful but does not disclose potential delays, auth requirements, or rate limits. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the core purpose and default behavior. Every word earns its place, with no redundant or vague phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (two optional params) and has an output schema, so return values need not be described. However, the description omits practical details like date format and the exact meaning of 'charge and drain per day' (e.g., units or aggregation). For a straightforward data-retrieval tool, this is adequate but leaves minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the lack of parameter documentation. It only mentions 'date range' and a default of 7 days, but does not specify date format, inclusivity, or how start/end relate to the range. This is insufficient for an agent to construct correct arguments without additional inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource (Body Battery), the action (charge and drain per day), and the scope (date range with default last 7 days). It is specific and distinct from sibling tools like sleep or heart rate, so an agent can immediately identify what this tool provides.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving Body Battery data over a date range, and the default of 7 days gives a hint. However, it does not explicitly state when to use this over alternatives (e.g., garmin_daily_summary) or when not to use it. The guidance is implied 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_briefingARead-only
Morning snapshot in one call: sleep, HRV, Body Battery, readiness, stress and RHR.
Fetches each section concurrently so answering "how am I doing today?" costs
one round trip instead of six. A section that fails is named in
``sectionsUnavailable`` rather than failing the whole briefing, and a
section the device does not record simply reports its own note.
Returns the numbers only — no training advice. Read readiness, HRV and Body
Battery together rather than any one alone.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral detail beyond the readOnlyHint/openWorldHint annotations: sections are fetched concurrently, partial failures surface in 'sectionsUnavailable' instead of failing the whole call, and unsupported device metrics return their own note. It also clarifies the output is numeric only and gives interpretation guidance. This is exactly the kind of contextual behavior an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tightly written, front-loaded with the purpose, and each subsequent sentence adds meaningful behavioral or interpretive detail. There is no filler or repetition, and the formatting with line breaks aids readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully covers what the tool returns, how failures are handled, and the distinction from per-metric tools. An output schema exists, so return structure doesn't need elaboration. The only notable gap is the lack of any detail about the date parameter's semantics, which prevents this from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is exactly one parameter, 'date', but the description says nothing about it. The input schema only shows it is an optional string or null with a default of null. With 0% schema description coverage, the description needed to at least imply the date format or default behavior; it does not, leaving the agent to guess.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a specific aggregate snapshot tool ('Morning snapshot in one call') and names the exact metrics included: sleep, HRV, Body Battery, readiness, stress, and RHR. It distinguishes itself from the many individual sibling metric tools by emphasizing the one-call aggregation benefit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description strongly implies when to use it: when answering 'how am I doing today?' with a broad morning snapshot, rather than calling six separate metric tools. It also warns that it returns numbers only and no training advice, which is useful routing guidance. However, it never explicitly names sibling tools or states when NOT to use it in favor of a single metric tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_create_workoutA
Create a structured running workout on Garmin, optionally scheduling it.
Steps are plain objects, in order. Each needs a ``kind`` (warmup, run,
interval, recovery, rest, cooldown) and a ``length`` — a distance like
"800m", "5km" or a time like "10min", "90s". Optionally add ``pace``
("4:30" or a range "4:30-4:20", minutes per kilometre) or
``heart_rate_zone`` (1-5), and a ``note``.
Repeats nest: ``{"repeat": 6, "steps": [{"kind": "interval", "length":
"800m", "pace": "4:30-4:20"}, {"kind": "recovery", "length": "90s"}]}``.
Once scheduled it appears on the watch on that date.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| steps | Yes | ||
| description | No | ||
| schedule_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations give only readOnlyHint=false and destructiveHint=false, so the description carries the responsibility for explaining real-world effects. It does this by noting optional scheduling and that 'Once scheduled it appears on the watch on that date,' plus the ordered and repeatable nature of steps. This is meaningful behavioral context and does not contradict 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the tool's purpose, then moves into a compact but sufficiently detailed explanation of the step grammar. The nested-repeat example is instructive rather than filler, and the final sentence about the watch appearance adds useful behavioral context. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with a complex nested `steps` parameter, the description is close to complete: it defines valid step kinds, length formats, pace formats, heart rate zones, notes, and repeat nesting. The main noticeable gap is the lack of an explicit `schedule_date` format, and `name`/`description` receive no dedicated explanation. Since an output schema exists, the absence of return-value details is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema_description_coverage at 0%, the description compensates strongly by fully explaining the hardest parameter, `steps`, including `kind`, `length`, `pace`, `heart_rate_zone`, `note`, and nested repeats. It also hints at `schedule_date` through 'optionally scheduling it' and 'that date.' However, it does not specify the expected date format or explicitly describe `name` and `description`, leaving some minor gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Create a structured running workout on Garmin, optionally scheduling it.' It identifies the resource and even describes the step structure, making the core purpose obvious. It does not explicitly contrast itself with the sibling garmin_schedule_workout, but the create-versus-schedule distinction is largely inferable from the naming and first sentence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the mechanics of building workout steps but never states when to prefer this tool over alternatives like garmin_schedule_workout or garmin_list_workouts. It provides no conditions, exclusions, prerequisites, or explicit routing guidance. The only usage signal is the implied act of creating a new workout, which is minimal guidance for an agent choosing among many siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_daily_summaryBRead-only
Whole-day wellness rollup: steps, calories, distance, floors, stress, body battery.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 that this is an aggregate rollup of multiple metrics, which is useful, but it does not clarify date defaults, timezone handling, or the fact that only one day is returned beyond the word 'daily'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise phrase with a clear metric list and no filler. It is appropriately front-loaded, though it is so brief that it misses opportunities to convey usage or parameter details without becoming bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value coverage is not needed. However, the description leaves date semantics undocumented and provides no guidance among the many sibling metrics tools, making it minimally adequate for a one-parameter read-only tool but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain the 'date' parameter's format, meaning, or default behavior. While 'whole-day' hints that the date selects the day, the agent is left to guess whether the date is ISO-formatted, localized, or required for a specific summary.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource ('whole-day wellness rollup') and lists the included metrics, so an agent can tell it aggregates daily wellness data rather than one metric. It is not a tautology and is distinguishable from granular siblings like garmin_steps or garmin_stress, though it lacks an explicit verb like 'get'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'whole-day wellness rollup' implies use when the agent wants a consolidated daily overview rather than a single metric, but it never explicitly states when to choose this over granular siblings or how it complements tools like garmin_sleep or garmin_body_battery. No exclusions or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_delete_workoutBDestructive
Delete a saved workout. Only affects plans — recorded activities cannot be deleted.
| Name | Required | Description | Default |
|---|---|---|---|
| workout_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint: true, so the agent knows deletion is irreversible. The description adds a valuable nuance: that recorded activities cannot be deleted, which prevents misuse. However, it does not disclose side effects such as what happens to scheduled instances of the workout or whether the deletion is permanent. With annotations covering the destructive nature, the description adds moderate behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with zero filler. It front-loads the action, then immediately clarifies the critical limitation. Nothing extraneous is included.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given it's a simple destructive tool with one parameter, the description covers the core behavior and a key limitation. However, it omits any guidance on the parameter and does not mention how it interacts with scheduling (e.g., whether deleting a workout also cancels scheduled instances). The output schema exists to cover return values, but the combination of missing parameter semantics and no scheduling context leaves the definition incomplete for an agent that needs to act reliably.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for the single parameter workout_id, and the description provides no explanation of what this ID refers to or how to obtain it. The agent is left to infer from the name alone, which is insufficient for a destructive operation. The description fails to compensate for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Delete a saved workout' with a specific verb and resource, and adds a scope limiter ('Only affects plans — recorded activities cannot be deleted.'). It distinguishes from recorded activities but does not explicitly name a sibling tool like garmin_unschedule_workout. Therefore it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool's purpose and clarifies its scope (plans only), but it does not explicitly state when to use it versus alternatives like garmin_unschedule_workout (which removes a scheduled workout but doesn't delete the saved plan). No contraindications or alternative routing are given, so usage guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_devicesARead-only
List the Garmin devices registered to the account, newest sync first.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 meaningful behavioral context beyond those annotations: the result is scoped to the account and ordered by newest sync first. There is no contradiction between the description and annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler. The verb and resource are front-loaded, and the ordering detail is appended compactly. Every word contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter read-only listing tool with annotations and an output schema present, the description is complete. It states what is listed and how results are ordered, and it does not need to describe return values because an output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero properties, so schema description coverage is effectively 100% and there are no parameter semantics to explain. For a zero-parameter tool, the baseline is 4, and the description adds no unnecessary parameter information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List'), a specific resource ('Garmin devices'), and a clear scope ('registered to the account'), plus an ordering detail ('newest sync first'). This clearly distinguishes it from siblings like garmin_whoami or garmin_activities without needing to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied: call this when you need the account's registered Garmin devices. However, the description does not explicitly state when to prefer it over alternatives, list exclusion cases, or mention prerequisites such as account authentication. It is not misleading, but it leaves the 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_export_activitiesBRead-only
Export activities in a date range as CSV — the export Garmin makes awkward.
One header row then one row per activity, newest last. Narrow the range if the response comes back truncated.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| start | No | ||
| activity_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and openWorldHint=true. The description adds valuable behavioral context beyond this: the output format (CSV with header row and one row per activity), ordering ('newest last'), and truncation behavior. This gives the agent a solid sense of what will happen when the tool is called.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded with the core purpose, and organized into three useful sentences covering format, ordering, and truncation handling. The phrase 'the export Garmin makes awkward' adds tone but little factual value, keeping this just shy of perfect.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists, so the description does not need to detail return values. It does cover format, ordering, and truncation. However, the complete absence of parameter descriptions in the schema means the description needed to explain start/end date formats and activity_type semantics, which it fails to do. An agent could call the tool with malformed dates or an unsupported activity type.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for undocumented parameters. It only vaguely references a 'date range' and mentions narrowing the range, but it does not explain the expected format for start/end or the meaning of activity_type. Two of the three parameters remain effectively unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies a verb and resource: 'Export activities in a date range as CSV.' This is specific and easily distinguishes the tool from most Garmin siblings. However, it does not explicitly differentiate itself from similar activity tools like garmin_activities, relying instead on the CSV format and date-range framing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to choose this tool over alternatives such as garmin_activities or garmin_activities_by_date. The only usage-related instruction is 'Narrow the range if the response comes back truncated,' which addresses response handling after invocation, not tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_heart_rateBRead-only
Heart rate for a day. Summary gives min/max/resting; raw adds the 2-minute series.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | ||
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation read-only and open-world, so the safety profile is covered. The description adds a useful detail about what summary and raw return (min/max/resting vs 2-minute series), but does not address default-date behavior or API-level constraints; the bar is lower due to annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler; the main scoping phrase comes first and the mode details follow. Every word carries meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple optional-parameter read with an output schema and read-only annotations, this is close to adequate. The notable gaps are undocumented date semantics and missing guidance on when this tool is preferred over related Garmin metric tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema property descriptions are absent (0% coverage), so the description must help interpret the two parameters. It does clarify that raw selects between summary and raw series, but the date parameter is only weakly tied to 'for a day' with no format, default, or null behavior explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly names the resource (heart rate) and the scoping (a day), and the second sentence distinguishes the summary and raw variants. It is recognizable as the heart-rate metric tool among the many Garmin siblings, though it lacks an explicit verb such as 'retrieves'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement about when to use this tool versus garmin_daily_summary or other metric siblings, nor any exclusion criteria. The summary/raw distinction is an output-mode detail, not a tool-selection guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_hrvBRead-only
Overnight heart rate variability: last-night average, baseline and status.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context about the data returned (overnight average, baseline, status) beyond the readOnlyHint and openWorldHint annotations. However, it does not explain the role of the date parameter, potential variability in results, or any constraints. Since the annotations already declare safety and open-world behavior, the description's contribution is minimal but not contradictory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that front-loads the core purpose and output. Every word adds value, with no fluff or redundancy. It is appropriately concise for a tool with one optional parameter and simple output.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity and the presence of an output schema (which presumably describes return values), the description covers the primary purpose. However, it omits any explanation of the date parameter and lacks usage differentiation. These gaps make the description incomplete for an agent to use correctly without additional clues.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has a single optional 'date' parameter with no description, and schema description coverage is 0%. The tool description does not mention the parameter at all, leaving agents without any idea of what the date parameter controls, what format it expects, or how omitting it changes the result. This is a critical gap for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's subject (overnight heart rate variability) and what it returns (last-night average, baseline, and status). This clearly distinguishes it from sibling tools like garmin_heart_rate or garmin_stress, which focus on different metrics. The purpose is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. It does not mention any conditions or exclusions, nor does it reference sibling tools. An agent must infer from the name and description alone, which may be sufficient for a human but is insufficient for an AI to make reliable routing decisions among many similar health-metric tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_intensity_minutesBRead-only
Moderate and vigorous intensity minutes for a day, against the weekly goal.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description doesn't need to cover safety. It does add useful context by noting the weekly goal comparison, which goes beyond the raw metric name. Still, it doesn't disclose default date behavior or any output quirks, so it adds moderate but not rich context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It states the core resource first and then the weekly-goal comparison, making it quickly scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with an output schema, the return value is adequately covered. The main missing piece is parameter semantics for the optional date, which keeps it from full completeness. Overall it's minimal but viable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%: the single optional 'date' parameter has no description beyond its type and default null. The tool description doesn't compensate by explaining the expected date format or what null means (e.g., today). With no param info in the description and low schema coverage, this is a meaningful gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource: moderate and vigorous intensity minutes for a day, and adds the weekly goal context that distinguishes it from plain daily metrics. It lacks an explicit verb like 'retrieve' or 'list,' but the noun-phrase is unambiguous and distinct from sibling tools such as garmin_heart_rate or garmin_steps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to select this tool over siblings like garmin_daily_summary or garmin_activities. There are no conditions, exclusions, or alternatives mentioned, so an agent must infer its position from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_last_activityARead-only
The most recently recorded activity.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description need not restate safety. It adds the useful behavioral detail that the tool selects the most recent activity, but it does not mention edge cases such as no recorded activities or sync delays.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, compact sentence conveys the tool's core semantics with no filler. The phrasing is front-loaded and appropriately sized for a zero-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter read-only tool, the description plus output schema are nearly sufficient. A small gap remains: it does not indicate what happens when no activity exists or how freshness is determined.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters and 100% schema description coverage, so no parameter explanation is required. The description correctly avoids inventing parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The phrase 'most recently recorded activity' clearly identifies a specific resource with a recency qualifier, so an agent can understand what is returned. However, it does not explicitly differentiate from siblings like garmin_activity or garmin_activities, and it lacks a verb such as 'retrieves'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the main use case: fetching the user's latest activity. It does not state when to avoid it, mention prerequisites, or point to alternative tools, so the agent must infer selection from the sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_list_workoutsBRead-only
List the workouts saved on the Garmin account, newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description only needs to add behavior beyond that. It adds the sort order ('newest first'), but discloses no details about pagination, maximum limit, or how the Garmin API's external state is reflected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the action, with no filler. The resource and key ordering behavior are stated efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, optional-parameter list call with an output schema present, the description covers the essential resource and ordering. The missing parameter elaboration and sibling routing reduce completeness, but low complexity and annotations prevent this from being a major gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage for its single parameter, and the tool description does not mention limit at all. The parameter name and default value in the schema give some self-evident meaning, but the description adds no guidance on what limit is applied to or how it behaves.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a concrete verb ('List') and identifies a specific resource: workouts saved on the Garmin account. It also communicates ordering ('newest first'), though it does not explicitly contrast itself with similar sibling list tools such as garmin_scheduled_workouts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool over alternatives like garmin_scheduled_workouts, garmin_activities, or garmin_create_workout. The description states only what the tool does, leaving the agent to infer selection from the tool name and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_personal_recordsBRead-only
Personal records across activity types.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and openWorldHint=true, which already convey the read-only nature and dynamic results. The description adds no behavioral context beyond that, such as whether records are aggregated or per-activity, or if results can be empty. Since annotations cover the basic safety profile, the description's minimal addition earns a baseline score of 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, succinct sentence with no fluff. It is front-loaded with the core purpose and is appropriately sized for a parameterless tool. There is no wasted text, and it is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (0 params, no output schema) and existing annotations, the description is minimal but not fully complete. It tells the agent what the tool returns (personal records) but not the format, granularity, or whether it's a list or single object. An agent might call it confidently, but without more context, the response shape is unpredictable, making this a borderline acceptable but not thorough description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema provides nothing to explain. According to the rubric, 0 params earns a baseline of 4. The description does not need to compensate for missing parameter docs, and it adds no redundant information about parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Personal records across activity types' clearly states a retrieval action (implicit) and a resource (personal records) with scope (across activity types). It distinguishes from siblings like garmin_whoami or garmin_last_activity by focusing on records, but it lacks detail on what exactly constitutes 'records' (e.g., best times, distances), so it's clear but not fully specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like garmin_activities or garmin_activity_splits. The description does not mention conditions, exclusions, or alternative tools, leaving the agent to infer based on the name alone. This is a significant gap for a tool with 34 siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_race_predictionsARead-only
Predicted race times for 5K, 10K, half and full marathon.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the distances covered and the predictive nature of the data, which is useful context but does not disclose more nuanced behavior such as whether predictions are based on recent training, can be missing, or are updated dynamically. The description adds some value but not rich behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no filler. The key information (distances) is front-loaded and every word adds value. It is appropriately sized for a zero-parameter read-only tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, read-only, zero-parameter tool with an output schema, the description is nearly complete. It identifies the resource and the specific race distances. A minor gap is the lack of any hint about how predictions are generated or what could affect them, but given the annotations and output schema, nothing essential is missing for a correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, and the schema is empty, so the baseline is 4 per calibration guidance. The description compensates by clarifying the scope of the result (5K, 10K, half, full marathon), which gives the agent a clear idea of what data will be returned even though there is nothing to configure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource: predicted race times for the four common race distances. It lacks an explicit verb like 'returns' or 'gets', but the noun phrase is specific enough to identify the tool's function and differentiate it from siblings like garmin_personal_records (actual records) and garmin_vo2max (a different metric).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. With many sibling health and performance tools (training_status, personal_records, vo2max), an agent could confuse race predictions with actual race history or training metrics. The description gives no context on use cases or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_respirationBRead-only
Breathing rate for a day: waking, sleeping, highest and lowest breaths per minute.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety profile. The description adds context about the metrics returned but does not disclose date handling, output format, or potential errors. Since annotations cover safety, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the purpose. Every word contributes to meaning, with no unnecessary detail. It is appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the low complexity (one optional parameter) and presence of an output schema, the description lacks essential invocation details like date format and null semantics. An agent cannot reliably construct a correct call without external knowledge, making it incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for parameter meaning. It implies the 'date' parameter selects the day but does not specify the format (e.g., YYYY-MM-DD) or explain what null default means. The agent is left guessing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (breathing rate) and the specific metrics (waking, sleeping, highest, lowest) for a day. It distinguishes from siblings like garmin_heart_rate by focusing on respiration. However, it lacks an explicit verb like 'get' or 'retrieve', so it's not a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. It does not mention any conditions, exclusions, or reference sibling tools like garmin_hrv or garmin_stress. The agent must infer usage solely from the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_scheduled_workoutsBRead-only
List workouts scheduled in a given month (defaults to the current one).
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | ||
| month | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, and the description's 'List' aligns with that. The description adds the default-to-current-month behavior, which is useful context, but does not disclose return format, pagination, or other behavioral details. With annotations covering safety, the added value is moderate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, concise sentence with no fluff. The key information (action, resource, scope, default) is front-loaded, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should clarify what data is returned (e.g., workout details, dates), but it does not. It also lacks guidance on edge cases like invalid months or empty results. For a simple list tool, it is adequate but missing details that an agent would need to interpret the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It mentions 'given month' and default behavior but fails to specify the expected integer ranges (e.g., month 1-12, year format) or any parameter constraints. The description is too vague to guide correct parameter construction.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('List') and resource ('workouts scheduled in a given month'), making the tool's purpose obvious. It distinguishes from siblings like garmin_list_workouts by scoping to scheduled workouts and a specific month, though it doesn't 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (when you need scheduled workouts for a month) but provides no explicit guidance on when not to use it or how it compares to siblings like garmin_list_workouts or garmin_schedule_workout. It lacks exclusion criteria or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_schedule_workoutA
Put an existing workout on the calendar for a given date.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ||
| workout_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate the operation is mutating but not destructive, and the description does not contradict them. However, the description adds no extra behavioral context, such as what happens if the date already has a scheduled workout or whether the operation is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with no filler. The core object and action are front-loaded, and every phrase adds meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and has an output schema, so return-value documentation is unnecessary. Still, the description leaves key operational details unspecified, especially the date format and prerequisite of an existing workout, making it minimally adequate rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. 'Existing workout' clarifies that workout_id refers to an already-created workout, and 'given date' clarifies the purpose of date. Yet it omits details like the expected date format or how to obtain a valid workout_id, so compensation is only partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb phrase: 'Put an existing workout on the calendar for a given date.' It identifies both the action and the resource, and the qualifier 'existing' distinguishes it from creating a new workout, while scheduling contrasts with unscheduling or deleting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It is clear when to use this tool: when an existing workout should be placed on a calendar date. However, it does not explicitly state when not to use it or name alternatives like scheduled_workouts, unschedule_workout, or create_workout, so it falls just short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_sleepBRead-only
Sleep for the night ending on the given date: stages, score and overnight vitals.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | ||
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, covering the safety profile. The description adds useful behavioral context by clarifying the date semantics (the date is the morning the sleep period ends, not the night it starts) and enumerating the returned content. It does not disclose behavior for missing data or the null-date default, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single 14-word sentence that front-loads the resource and packs in the key semantic nuance (night ending on the given date) plus the return contents. Every word earns its place; there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity read-only tool with an output schema (which relieves the description of explaining return values), this is mostly adequate. The remaining gaps are the unexplained raw parameter and the behavior when date is null (default). Given the large sibling family, a note on how sleep differs from daily_summary would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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-meaning burden. It partially does: 'night ending on the given date' gives semantic meaning to the date parameter. However, the raw boolean parameter is entirely unexplained — an agent cannot know what raw=true changes about the response — and the null-date default behavior is unaddressed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (sleep) and what it returns (stages, score, overnight vitals), which distinguishes it from the sibling health-metric tools like heart_rate, hrv, and stress. The verb is implied ('get'/'retrieve') rather than explicit, but the resource and return content are clear enough for an agent to identify what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'night ending on the given date' conveys when the tool is appropriate: when an agent needs sleep data for a specific night. However, there is no explicit routing guidance against alternatives such as garmin_daily_summary, which may also expose sleep information, and no mention of when to prefer this over sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_spo2BRead-only
Pulse oximetry for a day: average and lowest overnight SpO2.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and openWorldHint=true, covering the safety profile. The description adds the specific returned metrics (average and lowest overnight SpO2), which is useful behavioral context. It does not mention rate limits or permissions, but for a read-only tool with annotations this is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with zero filler. It efficiently conveys the core purpose without redundancy. For a tool with one parameter, this length is appropriate, though it could be slightly more explicit.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and read-only annotations, the description covers the core domain. However, it omits critical information about how to specify the date parameter (format, optionality, null semantics), which is necessary to invoke the tool correctly. This is a notable gap for such a simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one optional 'date' parameter with no description (0% schema coverage). The description's 'for a day' hints that the parameter specifies the day, but it fails to explain date format, null behavior, or default semantics. This does not adequately compensate for the complete absence of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (SpO2 pulse oximetry) and the scope (a day, with average and lowest overnight values). It is distinguishable from sibling tools like garmin_heart_rate or garmin_stress. However, it lacks an explicit verb like 'get' or 'retrieve', making it slightly less direct than ideal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, nor are there prerequisites, typical scenarios, or exclusions. The phrase 'for a day' only implies daily usage but does not explicitly route the agent away from other metrics or explain context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_stepsCRead-only
Daily step totals over a range, or 15-minute buckets for one day via intraday_date.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| start | No | ||
| intraday_date | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the annotations by explaining the two modes (daily range vs. intraday) and specifying the 15-minute bucket granularity for intraday data. However, it does not disclose return format, pagination, or any error behavior. Since annotations already cover read-only and open-world semantics, the description provides some additional value but falls short of fully characterizing the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, conveying the primary function in a single sentence. It wastes no words and immediately communicates the two usage modes. However, the brevity contributes to the lack of parameter detail, so while the structure is efficient, it sacrifices completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with three undocumented parameters and no output schema, the description is insufficient. It does not specify date formats, parameter combinations, default behaviors, or the structure of the returned data. An agent calling this tool would need to infer or experiment to use it correctly. The description provides only a high-level overview, not enough for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate by explaining the parameters, but it only mentions intraday_date explicitly. It implies start and end define the range for daily totals, but does not clarify their format, whether they are required together, or what happens if intraday_date is also provided. The relationship between the parameters is ambiguous, leaving the agent to guess at valid inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: retrieving daily step totals over a date range, with an alternative intraday mode for 15-minute buckets via the intraday_date parameter. It names the resource (steps) and the two operational modes, which distinguishes it from sibling tools like garmin_heart_rate or garmin_sleep. It could be slightly more explicit about the distinction from other health metric tools, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus its siblings. It does not mention that it should be used for step data specifically, nor does it reference alternative tools for other metrics. The description only explains what the tool does, not when to choose it over other Garmin tools. This leaves the agent to infer usage based solely on the tool's name and description, which is insufficient given the large sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_stressBRead-only
All-day stress: average, max and time spent in each stress band.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only and open-world, so the description does not need to cover safety. It adds some behavioral context by indicating the all-day scope and the summarization (average/max/band time), but it does not disclose potential null responses, date-range behavior, or data availability caveats.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It conveys the core scope and output shape efficiently, though it is slightly terse and could have used the saved space to clarify the date parameter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only tool with an output schema, the description is adequate but not complete. The main missing piece is parameter semantics around date, and there is no mention of units or edge cases; still, the output schema likely covers return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one undocumented parameter (date) with 0% schema description coverage, and the description does not mention the date parameter at all. The agent is left to guess the expected date format, whether the default null means 'today', and how date filtering behaves.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (all-day stress data) and the specific metrics returned (average, max, time in stress bands). It distinguishes itself from sibling metrics like garmin_heart_rate and garmin_hrv by naming stress specifically, though it lacks an explicit verb like 'get' or 'retrieve'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, no exclusions, and no mention of how it relates to overlapping tools like garmin_daily_summary or garmin_briefing. The agent must infer usage entirely from the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_submit_mfa_codeA
Finish signing in to Garmin with the one-time code it emailed.
Only needed when a Garmin tool has just reported that a code was sent. The code is valid for 30 minutes; afterwards the saved tokens last about a year and this is not asked for again.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already show this is not read-only and not destructive. The description adds useful behavioral context beyond those hints: the code expires in 30 minutes, successful submission establishes tokens lasting about a year, and the prompt should not recur. It does not cover invalid-code handling, but the annotations lower the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tight sentences with no filler. The main purpose is front-loaded, followed by a concrete usage trigger and useful lifecycle details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter authentication helper with an output schema present, this is complete: it states what the tool does, when it is needed, where the code comes from, how long it remains valid, and how often the user will see this step.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It does by explaining that the 'code' parameter is the one-time code sent by email. This adds real meaning beyond the schema's bare string type, even though it does not specify length or format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Finish signing in to Garmin with the one-time code it emailed.' This clearly identifies an MFA completion action and distinguishes it from the data-retrieval and workout-management sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use the tool: 'Only needed when a Garmin tool has just reported that a code was sent.' This is an unambiguous trigger condition and also implies that it should not be used otherwise.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_training_historyARead-only
Weekly training volume over recent weeks — the input for writing a plan.
Returns one row per week (distance, sessions, longest run, average pace) plus overall totals, in a single call. Use this before designing a plan rather than fetching activities one range at a time.
| Name | Required | Description | Default |
|---|---|---|---|
| weeks | No | ||
| activity_type | No | running |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 useful behavior beyond annotations: it returns one row per week plus totals, and emphasizes that all data comes in a single call, which conveys aggregation behavior and efficiency not visible in the schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loads the core purpose, then states output shape and usage guidance in a few lines. Every sentence contributes meaning, with no fluff or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only aggregation tool with an output schema and only two optional parameters, the description is nearly complete: it states what is returned, that it is one call, and when to use it. The main gap is parameter semantics, especially activity_type, but the defaults and parameter names reduce ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the two parameters, weeks and activity_type. It only loosely implies 'weeks' through 'over recent weeks' and never explains activity_type or how these parameters affect results, leaving the agent to guess despite defaults being visible in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: it reports weekly training volume and explicitly lists the returned columns (distance, sessions, longest run, average pace) plus totals. It also distinguishes its aggregated, single-call nature from fetching activities range by range, so an agent can separate it from sibling activity tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use this 'before designing a plan rather than fetching activities one range at a time,' giving clear context and pointing to the alternative behavior. It does not name specific sibling tools or list exclusions, but the usage context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_training_readinessCRead-only
Training readiness score for a day, with the factors that drove it.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
TDQS
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 safety profile is covered by structured data. The description adds a genuine behavioral detail – that the response includes the contributing factors, not just the number – but it does not disclose return format, score range, or derivation. Given annotation coverage, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single 13-word sentence with no filler, and the core resource is front-loaded. However, brevity comes at the cost of omitting parameter guidance, so it is efficient rather than fully developed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and a 0%-coverage parameter schema, the description bears the full burden of explaining the date parameter and the return shape; it explains neither format nor defaults. 'With the factors that drove it' hints at the response contents, but an agent is left without enough to call the tool correctly for a non-default date.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% – the date parameter has no schema-level documentation – and the description does not compensate. It only implies that date selects the day in question; it never states the expected format (e.g., YYYY-MM-DD), the meaning of null (presumably today), or timezone handling, so an agent cannot reliably construct a correct call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific, well-defined Garmin metric ('Training readiness score') and scopes it to 'a day, with the factors that drove it,' telling an agent what is returned and at what granularity. It does not explicitly distinguish itself from related siblings like garmin_training_status or garmin_daily_summary, so it stops 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to choose this tool over garmin_training_status, garmin_hrv, garmin_stress, or garmin_daily_summary, and no conditions, prerequisites, or exclusions are mentioned. The single declarative sentence leaves all selection decisions to the agent's prior knowledge.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_training_statusBRead-only
Training status, acute/chronic load balance and VO2 max as of a date.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint and openWorldHint, so the description need not repeat the safety profile. It adds the 'as of a date' scoping, which gives a small behavioral hint, but it does not disclose behavior for a null date, data freshness, or authentication requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One concise sentence front-loads the core data points and the date qualifier with no filler or redundancy. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with a single optional parameter and an output schema, the description gives the core purpose and the parameter's role. However, it lacks details like the meaning of an omitted date, and it does not address overlap with garmin_vo2max, making it adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% — the date parameter has no description. The description clarifies that date is the as-of date, but it does not specify format, allowed values, or null-date behavior, so it only partially compensates for the missing schema information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly names the data returned: training status, acute/chronic load balance, and VO2 max, qualified by date. This distinguishes it from simpler VO2 max tools by adding training status and load balance, though it does not use an explicit verb like 'retrieve'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives like garmin_vo2max or garmin_training_readiness. There are no exclusions or conditions mentioned, so an agent must infer when to choose this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_unschedule_workoutB
Remove a scheduled workout from the calendar. The workout itself is kept.
| Name | Required | Description | Default |
|---|---|---|---|
| scheduled_workout_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already show readOnlyHint=false and destructiveHint=false. The description adds a valuable behavioral note that the workout itself is kept, which aligns with destructiveHint=false and clarifies a key side effect. However, it does not mention reversibility, permissions, or what happens to the calendar entry beyond removal. With annotations present, this is adequate 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence. It front-loads the action and follows with the key clarification. No redundant words or filler. It is appropriately concise for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema and low complexity, the description is incomplete. It does not explain the required parameter, any prerequisites (e.g., obtaining the scheduled_workout_id from garmin_scheduled_workouts), or when to use this tool. For a modification tool, an agent would need more context to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the sole parameter, scheduled_workout_id. The description does not explain what this ID represents, how to obtain it, or its format. The parameter is only defined by its name and type in the schema, and the description fails to compensate. This is a critical gap for invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (remove a scheduled workout) and explicitly distinguishes from deleting the workout itself by noting 'The workout itself is kept.' This separates it from sibling tools like garmin_delete_workout. It is a specific verb+resource with a key differentiating detail.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description implies usage via the phrase 'remove a scheduled workout' but does not name sibling tools or state conditions (e.g., use when you want to free the calendar but keep the workout definition). No exclusions or alternative references are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_vo2maxBRead-only
VO2 max, fitness age and heat/altitude acclimation as of a date.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the agent knows this is a safe read operation that may return data outside a closed set. The description adds the date-scoped snapshot behavior, which is useful, but it does not disclose what happens when no date is provided (default null) or whether the data is per-day or a current estimate. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with no filler. The key resource and qualifier are front-loaded. It could be slightly more informative about the date parameter, but it earns its place as a concise definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a single optional parameter and an output schema, so the description does not need to explain return values. However, the description leaves ambiguity about the default behavior (null date) and the exact scope of 'heat/altitude acclimation.' For a simple read-only metric tool, this is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the single 'date' parameter. The description says 'as of a date,' which implies the date parameter controls the snapshot date, but it does not explain the format (e.g., YYYY-MM-DD), the meaning of null (likely current/latest), or how far back data is available. This is minimal but non-tautological value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (VO2 max) and adds two related metrics (fitness age, heat/altitude acclimation) with a date qualifier. It is clear enough to distinguish from siblings like garmin_heart_rate or garmin_training_status, though it does not explicitly name a sibling it is not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool reports a snapshot as of a date, which gives some context for when to use it (e.g., checking fitness metrics for a specific day). However, it does not state when to prefer this over garmin_training_status, garmin_daily_summary, or garmin_briefing, nor does it mention any exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_weightBRead-only
Weigh-ins over a date range (default: last 7 days), with body composition where recorded.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| start | No |
TDQS
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 nature is covered. The description adds the default date window and the caveat about body composition, but doesn't disclose return shape, units, or behavior when no weigh-ins exist; this is acceptable 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the core behavior and adds the default range and body-composition caveat without redundancy. Every phrase carries meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with two optional parameters, the description covers the main purpose and default behavior. However, with no output schema and 0% parameter documentation, an agent still lacks enough detail about accepted date formats and response contents to call it with full confidence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the undocumented start and end parameters. It mentions a date range and a default of the last 7 days, but does not specify date formats, inclusivity, or how null values behave.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource ('weigh-ins') and the date-range scoping, which distinguishes it from most Garmin sibling tools at a glance. It lacks an explicit verb like 'get' or 'list', but the meaning is unambiguous from the name and context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as garmin_daily_summary, which may also include weight data. The description only implies usage through 'over a date range' and the default window, but provides no exclusions or selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garmin_whoamiARead-only
Identify the signed-in Garmin account and its unit preferences.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare this as read-only and open-world, so the safety profile is covered. The description adds minor behavioral context by specifying that it returns account identity and unit preferences, but it does not disclose any potential edge cases or additional behaviors beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly worded sentence with no filler. It front-loads the action and resource, making it immediately scannable for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only identity tool with an output schema and no side effects, this description is complete. The agent has everything needed to invoke it correctly: no inputs, a clear purpose, and the safety profile already provided by annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the parameter-semantics burden is minimal and the baseline is 4. The description correctly conveys that the tool needs no input, and mentioning the account and unit preferences as the subject is sufficient for a no-argument call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Identify') and clearly names the resource: the signed-in Garmin account and its unit preferences. This uniquely distinguishes it from the long list of sibling tools, which all target specific data types rather than the current user identity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied by the tool's name and description: call it when you need to know who is signed in or what unit preferences are active. However, it does not explicitly state when to use it versus alternatives or mention any prerequisites, so the guidance is left to inference.
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.
35 tool updates
v0.4.0- First observed
garmin_activities - First observed
garmin_activities_by_date - First observed
garmin_activity - First observed
garmin_activity_splits - First observed
garmin_activity_weather - First observed
garmin_api_get - First observed
garmin_body_battery - First observed
garmin_briefing - First observed
garmin_create_workout - First observed
garmin_daily_summary - First observed
garmin_delete_workout - First observed
garmin_devices - First observed
garmin_export_activities - First observed
garmin_heart_rate - First observed
garmin_hrv - First observed
garmin_intensity_minutes - First observed
garmin_last_activity - First observed
garmin_list_workouts - First observed
garmin_personal_records - First observed
garmin_race_predictions - First observed
garmin_respiration - First observed
garmin_schedule_workout - First observed
garmin_scheduled_workouts - First observed
garmin_sleep - First observed
garmin_spo2 - First observed
garmin_steps - First observed
garmin_stress - First observed
garmin_submit_mfa_code - First observed
garmin_training_history - First observed
garmin_training_readiness - First observed
garmin_training_status - First observed
garmin_unschedule_workout - First observed
garmin_vo2max - First observed
garmin_weight - First observed
garmin_whoami
TDQS
Scored across 35 tools
Most tools target a distinct metric or resource, and descriptions generally make boundaries clear. A few adjacent tools could be confused, such as garmin_last_activity versus garmin_activities, or garmin_create_workout with optional scheduling versus garmin_schedule_workout.
All tools share the garmin_ prefix and use snake_case, which provides strong consistency. However, patterns vary between noun-style names like garmin_sleep and garmin_steps, verb_noun names like garmin_create_workout, and adjectival forms like garmin_scheduled_workouts.
Thirty-five tools is a very large surface for one MCP server, even for a broad health/activity domain. Several metric-specific tools could plausibly be consolidated or grouped, and the count exceeds the range where agents can efficiently discover and select the right tool.
The server covers the main Garmin domains well: wellness metrics, activity retrieval and detail, workout creation and scheduling, and account auth. Minor gaps exist, such as no workout update operation and no nutrition/hydration coverage, but garmin_api_get provides a general escape hatch.
Maintenance
Related MCP Connectors
Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.
- freddyOAuthcoach.freddy
Connect your wearables, rings and training apps, then ask your AI about your own health data.
Connect your health, fitness, nutrition, sleep, and wearable data to your AI assistant.
- Coach MCPOAuthai.iamcoach
Your endurance training data in your AI assistant: activities, recovery, plan, workout edits.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables creation, management, and scheduling of Garmin Connect workouts from natural language descriptions, plus viewing activities, calendar data, and weather information from completed workouts.28MIT
- FlicenseNot gradedqualityBmaintenanceEnables AI assistants to access and query Garmin Connect health and fitness data, including sleep, HRV, training load, and activities, with an optional coaching plugin for personalized training plans.5 npm4-
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to query live Garmin Connect health and fitness data, including daily metrics, activities, sleep analysis, and trends via natural language.MIT
- FlicenseNot gradedqualityCmaintenanceEnables querying your Garmin Connect data including recent activities, detailed metrics, and daily stats through natural language.-