garmin-mcp
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., "@garmin-mcphow did I sleep 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.
garmin-mcp
An MCP server that exposes your Garmin Connect data to Claude as tools. Ask things like "how did I sleep last night?" or "summarise my training load this week" and Claude answers using your real Garmin data instead of you copy-pasting screenshots from the app.
Demo uses sample data. Regenerate with uv run --with pillow python scripts/make_demo_gif.py.
Single-user, and read-only by default — with one opt-in write path for creating strength workouts (see Write tools). Two ways to run it:
Mode | Where it runs | Works with | Setup |
Local (stdio) | Your own machine | Claude Desktop | One command |
Self-hosted HTTP | Cloud Run (or anywhere) | Claude.ai web, mobile, Desktop | ~10 min, ~$0/mo |
Tools
Tool | What it returns |
| One-call morning snapshot — fuses sleep, HRV, Body Battery, readiness, training load, and resting HR (plus RHR vs. your baseline) so Claude can reason across them in a single shot. Each section degrades to |
| Sleep duration, stages (deep / light / REM / awake), score, overnight HRV. |
| List of recent activities with type, duration, distance, average heart rate. |
| Full metrics for one activity, including splits, HR zones, and power. |
| Daily training load with acute (ATL), chronic (CTL), ACWR, and current status. |
| Daily readiness score 0-100 with contributing factors (sleep, HRV, recovery). |
| Current HRV status, baseline range, and the last 7 nights of readings. |
| Body battery values across the day with min, max, charged, drained. |
| Daily step count, distance, calories, floors, and intensity minutes. |
| Resting heart rate trend and average over the requested window. |
| Stress levels across the day and time-in-zone breakdown. |
| Daily respiration rate: average, min, max, sleep vs waking. |
| VO2 max (running/cycling), fitness age, and predicted 5K/10K/half/marathon. |
| Personal records across activity types (fastest 1K/5K, longest run, etc.). |
| Weight, body fat, and muscle-mass trend over recent days. |
| Weekly aggregates for steps, stress, or intensity minutes. |
| Set-by-set breakdown of a strength session: exercises, reps, weight, volume. |
| Garmin endurance score with its per-activity-type contributors. |
| Garmin hill score (climbing strength + endurance) for a date. |
| Weather recorded during an activity (temp, humidity, wind). |
Every response is a Pydantic model serialised to JSON, with null for fields Garmin did not record.
Extended read-only tools
Added in this fork (src/garmin_mcp/extra_tools.py). They return a GarminData envelope with the
compacted Garmin payload (nulls dropped, long arrays downsampled), except get_heart_rate_timeline
which is fully typed. All read-only.
Tool | What it returns |
| Intraday heart rate with resting/min/max and the last reading the watch synced (closest thing to "current HR"). |
| Everything Garmin has for one day: steps, calories, floors, intensity minutes, HR, stress, Body Battery, SpO2, respiration, sleep. |
| Steps in 15-minute buckets with activity level. |
| Daily wellness metrics with intraday detail. |
| What charged or drained Body Battery; the day's detected events. |
| Daily stats + body composition, lifestyle logging, food log, cycle tracking. |
| Per-day steps, weigh-ins and blood pressure over a date range. |
| Totals per activity type between dates (distance, duration, elevation). |
| Performance markers. |
| Activities in a range (optionally by type); the most recent one. |
| Second-by-second HR, pace, altitude, cadence, power... as named, downsampled series. |
| Richer per-activity data. |
| Training calendar, plans, goals, badges. |
| Devices with last sync time, gear with stats, profile and unit system. |
Write tools (opt-in)
These create data in your Garmin account and are disabled unless you set GARMIN_WRITE_ENABLED=1. All other tools stay read-only regardless.
Tool | What it does |
| Assembles a strength workout and shows the resolved Garmin exercises, per-exercise confidence, warnings, and a confirmation token. Makes no network call. |
| Creates the workout in your Garmin Connect library after you pass the confirmation token from |
Workflow: call preview_strength_workout, review the resolved exercises, then pass its confirmation_token to create_strength_workout (the token is bound to the exact workout previewed). The created workout lands in your Garmin Connect library — to get it on the watch, open it in Garmin Connect, tap Send to Device, then sync. Free-text exercise names are matched against Garmin's catalog (data/exercise_taxonomy.json); names that don't map cleanly are flagged in the preview. Deleting and scheduling are intentionally not exposed.
Related MCP server: Garmin Health MCP Server
Quick start — Claude Desktop
Requires Python 3.12+ and uv (install with curl -LsSf https://astral.sh/uv/install.sh | sh).
1. Authorise once
uvx garmin-mcp loginPrompts for your Garmin email, password, and MFA code (if enabled), then saves session tokens to your user cache directory. You won't be prompted again until the tokens eventually expire (typically weeks to months).
2. Add the server to Claude Desktop
Edit claude_desktop_config.json:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"garmin": {
"command": "uvx",
"args": ["garmin-mcp"]
}
}
}Restart Claude Desktop. The Garmin tools appear in the tool picker. Ask Claude "what was my resting heart rate this week?" to test.
3. (Optional) Set credentials for unattended re-auth
By default, when Garmin tokens expire you'll see a "saved Garmin session is invalid" error and you'll need to re-run uvx garmin-mcp login. To skip that step, put your credentials in the config so the server can silently re-authenticate:
{
"mcpServers": {
"garmin": {
"command": "uvx",
"args": ["garmin-mcp"],
"env": {
"GARMIN_EMAIL": "you@example.com",
"GARMIN_PASSWORD": "your-garmin-password"
}
}
}
}Anyone with read access to this file can see these credentials.
Where session tokens are stored
garmin-mcp login writes session tokens to your platform's user cache directory:
OS | Path |
Linux |
|
macOS |
|
Windows |
|
Delete the garth/ directory to "log out" of Garmin.
Self-hosted HTTP (Claude.ai web/mobile)
If you want the connector available from Claude.ai on the web or your phone, run the same server in HTTP mode. The serve subcommand wraps it in an OAuth 2.1 layer with PKCE and Dynamic Client Registration so Claude.ai can connect to it as a custom connector.
See DEPLOY.md for the Cloud Run walkthrough. The short version:
docker build -t garmin-mcp .
docker run --rm -p 8080:8080 \
-e MCP_ISSUER_URL=http://localhost:8080 \
-e MCP_AUTH_PASSWORD=$(openssl rand -base64 24) \
-e JWT_SECRET=$(openssl rand -base64 48) \
-e GARMIN_EMAIL=you@example.com \
-e GARMIN_PASSWORD=your-garmin-password \
garmin-mcpFor Cloud Run, the always-free tier covers personal usage. Expect under $1/month.
How auth works (HTTP mode)
The server is its own OAuth 2.1 authorisation server. When you add the connector in Claude.ai, Claude registers itself using RFC 7591 Dynamic Client Registration, then sends you through a PKCE-protected flow. You enter the password set as MCP_AUTH_PASSWORD, and the server issues a 24-hour JWT access token plus a refresh token that rotates on every use.
This is intentionally minimal: one password, one user. Anyone with the password can read your Garmin data.
Data availability
Garmin returns sparse data depending on which watch you wear, how long you've worn it, and what features your model supports. Every tool follows the same convention: when a field isn't recorded, the response carries null for that field (and often a note explaining the absence) rather than erroring.
A few specific cases worth knowing about:
get_training_load.current_status = "NO_STATUS_2"andget_hrv_status.status = "NONE"mean Garmin doesn't have enough recent activity history to compute the metric. They fill in naturally after ~7 consecutive days of sustained activity or watch wear.VO2 max only updates after qualifying activities (runs, rides).
get_fitness_metricswalks back up to 7 days to surface your most recent reading rather than returning null on a rest day.get_stresszone-minute breakdown (rest_minutes,low_minutes, etc.) can come back null on partial-data days even thoughavg_stressand the timeline are populated.HRV, training readiness, endurance score, hill score, and fitness age all require a recent compatible watch (Fenix 6+ / Forerunner 245+ / similar). Older watches simply won't report them.
If a tool seems to return less than you'd expect, check the same metric in the Garmin Connect app or on connect.garmin.com for the same date. If Garmin shows it there and we return null, that's a parser bug — file an issue with the date and the field name and we can usually map it in a follow-up release.
Security caveats
This is single-user software. Don't run it as a shared service for multiple Garmin accounts — you'd be holding other people's credentials, and it likely violates Garmin's ToS.
Garmin credentials and session tokens live on your local machine. Treat any password you put in a JSON config file as compromised in the long term — use a dedicated Garmin account if that's a concern.
The unofficial
garminconnectlibrary can break when Garmin changes their internal API. If a tool starts returning empty data, check that package's changelog.In HTTP mode, registered DCR clients and refresh tokens live in process memory and disappear on restart. Access tokens (JWTs) survive because they are stateless.
Read-only by default. The one write path — creating strength workouts — is off unless you set
GARMIN_WRITE_ENABLED=1, and is enforced at the client layer by a method allowlist (onlyupload_workoutis writable; no activity upload, profile edits, deletes, or scheduling). Each create requires a preview→token confirmation, and in HTTP mode the server refuses to start with writes enabled but auth disabled.
Project layout
garmin-mcp/
├── pyproject.toml
├── Dockerfile
├── README.md
├── DEPLOY.md
└── src/
└── garmin_mcp/
├── __init__.py
├── __main__.py # python -m garmin_mcp -> CLI
├── cli.py # argparse entry: stdio / serve / login
├── server.py # FastMCP app, tools, login UI
├── garmin_client.py # garminconnect wrapper (read allowlist + write gate)
├── auth.py # OAuth 2.1 provider
├── cache.py # TTL cache
├── paths.py # token directory resolution
├── exercise_resolver.py # free-text exercise -> Garmin (category, name)
├── strength_builder.py # strength workout spec -> Garmin payload
├── models.py # Pydantic response models
└── data/
└── exercise_taxonomy.json # Garmin's exercise catalog (resolver data)Contributing
git clone https://github.com/Tyler-Irving/garmin-mcp.git
cd garmin-mcp
uv sync --extra dev
uv run garmin-mcp login # one-time interactive login
uv run mcp dev src/garmin_mcp/server.py # inspect tools in MCP Inspector
uv run garmin-mcp # stdio mode
uv run garmin-mcp serve # HTTP mode
uv run pytest # tests
uv run ruff check . && uv run ruff format --check .
uv run mypy src testsAcknowledgements
garminconnectby cyberjunky for doing the hard work of reverse-engineering the Garmin Connect API.The Model Context Protocol team for the SDK.
Available Tools
63 toolscreate_running_workoutA
Create a structured running workout in your Garmin Connect library (a WRITE).
Supports warmup/cooldown/interval/recovery steps, repeat groups for
intervals, and optional pace targets ('M:SS' per km). Requires writes to be
enabled (GARMIN_WRITE_ENABLED) and a matching confirmation_token from
preview_running_workout. The workout lands in your library — get it on
the watch via schedule_workout (syncs automatically for that date) or
"Send to Device" in Garmin Connect.
Args:
workout: the workout definition (same shape as preview).
confirmation_token: token returned by preview_running_workout.
confirm: dev/stdio only (no JWT secret) — set True to confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| workout | Yes | ||
| confirmation_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| status | Yes | |
| workout_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses the write nature, prerequisite token, and that the workout lands in the library. Also notes the dev-only confirm flag. While not exhaustive (e.g., reversibility, failure modes), it covers the critical behavioral traits for safe usage.
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?
Description is well-structured with an overview and an Args section. Sentences are purposeful; no fluff. Although moderately long, it earns its length given the tool's complexity.
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 complex nested input schema and the write operation, the description fully covers the required workflow (preview → confirm), mentions prerequisites, and references relevant siblings. The output schema exists, so no need to detail return values. Comprehensive for the tool's complexity.
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%, meaning the description text must compensate. It does: explains workout shape matches preview, clarifies confirmation_token's source, and details the confirm parameter (dev-only, no JWT secret). Adds meaning beyond the bare schema definitions.
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?
Description explicitly states it creates a structured running workout in Garmin Connect library, with a clear verb-resource pair. It distinguishes from sibling tools like preview_running_workout (preview only) and schedule_workout (scheduling), and emphasizes that this is a WRITE operation.
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?
Provides explicit when-to-use guidance: requires writes enabled and a confirmation token from preview_running_workout, and explains how to get the workout onto the watch via schedule_workout. Clearly differentiates from preview and scheduling workflows.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_strength_workoutA
Create a strength workout in your Garmin Connect library (a WRITE).
Requires writes to be enabled (GARMIN_WRITE_ENABLED) and a matching
confirmation_token from preview_strength_workout (it binds to the
exact workout previewed). The workout lands in your library — it reaches the
watch only after you "Send to Device" in Garmin Connect and sync.
Args:
workout: the workout definition (same shape as preview).
confirmation_token: token returned by preview_strength_workout.
confirm: dev/stdio only (no JWT secret) — set True to confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| workout | Yes | ||
| confirmation_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| status | Yes | |
| verified | Yes | True if the upload round-tripped with no blank exercises. |
| workout_id | No | |
| blank_steps | No | Step orders Garmin blanked (should be empty). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses that the tool is a write operation, requires confirmation token, and that the workout lands in library but not immediately on watch. Could mention idempotency or side effects, but sufficient context is given.
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?
Well-structured with clear bullet points and separate sections. Every sentence adds value, no fluff.
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 complexity (nested schema, 3 params, write operation), the description covers the workflow, prerequisites, parameter meanings, and caveats. Output schema exists, so lack of return value explanation 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?
Description clarifies that 'workout' shape is same as preview, 'confirmation_token' binds to exact preview, and 'confirm' is for dev/stdio only. The input schema descriptions are detailed, but the description adds crucial behavioral context beyond 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?
Description clearly states it creates a strength workout in Garmin Connect library, explicitly calling it a WRITE. This distinguishes it from the sibling tool 'preview_strength_workout', which is for previewing.
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 states prerequisites: writes must be enabled and a matching confirmation_token from preview_strength_workout is required. Also explains the workflow: preview then create, and that the workout reaches the watch only after manual send/sync.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_workoutA
Delete ONE workout from your Garmin Connect library (a WRITE, irreversible).
Preview-then-confirm: call without a token first — that call deletes
nothing and returns the workout's name plus a confirmation_token.
Review the name, then call again with the token to actually delete.
Deleting from the library also removes the workout from the watch on its
next sync. There is no bulk delete; confirm each workout individually.
Args:
workout_id: id from list_workouts.
confirmation_token: token from the preview call for this same id.
confirm: dev/stdio only (no JWT secret) — set True to confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| workout_id | Yes | ||
| confirmation_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | |
| status | Yes | |
| deleted | Yes | False on the preview call; True once actually deleted. |
| workout_id | Yes | |
| confirmation_token | No | On a preview call: pass this back to delete_workout to confirm. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it delivers. It discloses that the preview call 'deletes nothing', that the operation is a WRITE and irreversible, and the cross-cutting side effect 'Deleting from the library also removes the workout from the watch on its next sync.' The dev-only semantics of the confirm flag are also surfaced. This is exactly the critical behavioral disclosure a delete operation 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 front-loaded with the single most important fact (WRITE, irreversible), followed by a tight narrative of the handshake, then the side effect, then the constraint. The three-sentence body is efficient and every clause earns its place. It drops to a 4 only because the closing Args block makes the whole thing slightly longer than the leanest possible version, though the zero schema coverage justifies that length.
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 mutation with a destructive edge, the description covers the safety mechanism (token handshake), the failure mode it prevents (accidental deletion without review), the side effect on the watch sync, and the environment constraint (dev/stdio only). An output schema exists, so return values don't need documenting. There is no material gap in state, effects, or prerequisites.
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, and it does. The Args section maps each parameter to its origin: 'workout_id' from list_workouts, 'confirmation_token' from the preview call bound to 'this same id', and 'confirm' qualified as a dev/stdio-only flag. This adds meaning well beyond the bare schema and prevents the classic bug of the agent passing a token as a workout_id.
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?
Opens with a specific verb+resource+scope: 'Delete ONE workout from your Garmin Connect library (a WRITE, irreversible).' The qualifier 'ONE' combined with 'no bulk delete' directly distinguishes it from any batch-style sibling and from the schedule/unschedule pair. The irreversibility cue adds important grading context in the 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 clearly explains the two-call preview-then-confirm protocol, when the token is needed, and the 'no bulk delete' constraint that tells the agent it must loop. It explicitly cautions 'confirm each workout individually.' However, it never explicitly contrasts with the sibling unschedule_workout, so the 4 reflects 'clear context, no named alternative'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_activities_by_dateA
Activities between two dates, optionally filtered by type (running, cycling, swimming, ...).
Args: start_date: YYYY-MM-DD. Defaults to 30 days ago. end_date: YYYY-MM-DD. Defaults to today. activity_type: Garmin type key such as running, cycling, walking, strength_training.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | ||
| start_date | No | ||
| activity_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions default behaviors for start_date and end_date, which is useful. However, it does not specify what the response looks like, whether results are sorted, or any limitations (e.g., max results, date validation). It provides some behavioral context but not comprehensive 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 concise and well-structured. The purpose is stated in the first sentence, followed by a clear argument list. Every sentence adds value, and there is no technical jargon or fluff.
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 3 parameters and a low schema coverage, the description covers the essential usage aspects: date range, optional type filter, and defaults. It is largely complete, though minor gaps exist (e.g., behavior when start_date is after end_date, case sensitivity of activity_type, or explicit return format). Given the presence of an output schema, these gaps are 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?
Schema description coverage is 0%, so the description must compensate. It does so effectively by explaining the YYYY-MM-DD format, the default values (30 days ago and today), and providing concrete examples of valid activity_type values. This adds substantial meaning beyond the schema's bare nullable strings.
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 retrieves activities between two dates with optional type filtering. It uses a specific verb and resource, and the date-range scope distinguishes it from siblings like get_recent_activities and get_activity_details. 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?
The description clearly implies when to use this tool: when you need activities within a custom date range and optionally by activity type. However, it does not explicitly mention alternatives or when not to use it, so it provides clear context but no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_activity_detailsA
Detailed metrics for one activity, including splits and HR zones.
Args:
activity_id: The activity's numeric Garmin ID, as returned by
get_recent_activities.
| Name | Required | Description | Default |
|---|---|---|---|
| activity_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | |
| splits | No | |
| calories | No | |
| hr_zones | No | |
| avg_power | No | |
| max_power | No | |
| start_time | No | |
| activity_id | Yes | |
| activity_type | No | |
| avg_speed_mps | No | |
| max_speed_mps | No | |
| avg_heart_rate | No | |
| max_heart_rate | No | |
| distance_meters | No | |
| duration_seconds | No | |
| normalised_power | No | |
| elevation_gain_meters | No | |
| elevation_loss_meters | No | |
| training_effect_aerobic | No | |
| training_effect_anaerobic | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose any behavioral traits such as side effects, permissions, or rate limits. It only states the functionality without addressing safety or resource impact, which is a notable gap.
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 with two sentences: the first states the purpose, and the second defines the parameter. No extraneous information is present, and it is front-loaded effectively.
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 that an output schema exists (so return values are defined there), and the tool has only one parameter, the description adequately covers what the tool does and how to use it. It could be more complete by mentioning error handling or scope (e.g., user ownership), but overall it is sufficient.
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 parameters, but the description adds meaningful context: 'activity_id: The activity's numeric Garmin ID, as returned by get_recent_activities.' This clarifies the source and format of the parameter, beyond what the schema title 'Activity Id' provides.
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 returns 'Detailed metrics for one activity, including splits and HR zones,' which specifies the verb (retrieve details) and resource (one activity), distinguishing it from sibling tools like get_recent_activities that list activities.
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 guidance on obtaining the activity_id ('as returned by get_recent_activities'), but does not explicitly state when to use this tool versus alternatives or include any when-not-to-use scenarios. The usage is implied for when detailed metrics of a specific activity are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_activity_gearB
Gear (shoes, bike) linked to an activity.
Args: activity_id: Garmin activity ID.
| Name | Required | Description | Default |
|---|---|---|---|
| activity_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure, but it only states the data relationship. It does not mention empty-list behavior, invalid activity ID handling, permissions, or any other runtime traits.
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 and well-structured: a one-line purpose statement followed by a clear Args section. No redundant content or filler is present.
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, has an output schema, and the single parameter is clarified. However, the description lacks usage context and behavioral transparency, so an agent gets only the bare minimum needed to call 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?
The schema provides only the parameter name and type with no description, so the explicit note that activity_id is a 'Garmin activity ID' adds valuable domain context beyond the structured 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 identifies the resource (gear linked to an activity) and distinguishes it from siblings like get_gear by specifying the activity linkage. However, it lacks an explicit verb such as 'retrieve' or 'list', leaving the action to be inferred from the tool name.
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 for when to use this tool versus alternatives. It does not mention get_gear, get_activity_details, or any conditions such as needing gear information for a specific activity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_activity_power_zonesB
Time spent in each power zone for a cycling or running-power activity.
Args: activity_id: Garmin activity ID.
| Name | Required | Description | Default |
|---|---|---|---|
| activity_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states what the tool does, not any behavioral traits like read-only nature (obvious for a getter), potential error conditions, or requirements (e.g., activity must have power data). The description lacks any disclosure about edge cases or limitations.
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: two lines with no wasted words. It front-loads the purpose and includes a structured Args section. Every word earns its place, and the format is clean and easily parsed.
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 getter with one parameter and an output schema (which presumably documents the return structure), the description covers the essential purpose and parameter meaning. However, it lacks behavioral context such as prerequisites (e.g., activity must have power data) or what happens for unsupported activities. Given no annotations, it could be more complete, but it's sufficient for a straightforward read operation.
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, so the description must explain the parameter. It does so in the 'Args:' section: 'activity_id: Garmin activity ID.' This adds meaning beyond the schema's bare type string, clarifying the expected identifier. While minimal, it adequately compensates for the lack of schema documentation for this single parameter.
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 purpose: 'Time spent in each power zone for a cycling or running-power activity.' This specifies the verb (get) and resource (power zone time) and distinguishes it from many sibling tools by focusing on power zones. However, it does not explicitly differentiate from similar get_activity_* tools (e.g., get_activity_details, get_activity_timeseries), 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?
The description provides no guidance on when to use this tool versus alternatives. It only states the purpose without saying 'use this when you need power zone breakdown' or mentioning any exclusions. There is no reference to alternative tools or conditions, leaving the agent to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_activity_split_summariesB
Per-split summaries of an activity (laps, intervals, rest) with pace, HR and power.
Args: activity_id: Garmin activity ID.
| Name | Required | Description | Default |
|---|---|---|---|
| activity_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does not state whether the operation is read-only, what data it returns in terms of format or pagination, or any authentication/rate-limit considerations. The only behavioral hint is the verb 'get', which implies a read but is not explicit.
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 plus an Args section, with no redundancy. It is front-loaded with the core purpose and immediately provides the parameter meaning. Very efficient.
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 tool with an output schema, the description is minimally sufficient to understand what it does. However, given the large number of sibling tools that retrieve activity data, more context on when this specific split summary is appropriate (e.g., versus get_activity_typed_splits) would improve completeness. The output schema covers return details, so that is not a 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 schema provides only the type and name for activity_id (coverage 0%). The description adds 'Garmin activity ID', which gives context on the expected format and domain. This is a modest improvement, but it does not elaborate on required format or how to obtain the ID.
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 returns per-split summaries of an activity with specific metrics (pace, HR, power). It specifies the resource (activity splits) and the action (get summaries). While it doesn't explicitly contrast with similar tools like get_activity_typed_splits, the mention of 'laps, intervals, rest' gives enough specificity to understand its scope.
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 get_activity_details or get_activity_timeseries. The description provides no context for selection, no exclusions, and no prerequisites. An agent would have to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_activity_timeseriesA
Second-by-second chart data of an activity as named series (heart rate, pace, altitude, cadence, power, temperature...), downsampled to max_points.
Args: activity_id: Garmin activity ID (from get_recent_activities). max_points: Maximum samples per series (default 120).
| Name | Required | Description | Default |
|---|---|---|---|
| max_points | No | ||
| activity_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full responsibility for behavioral disclosure. It does disclose two useful behaviors: the data is second-by-second and downsampled to max_points. However, it does not address potential edge behaviors such as variable series availability by activity type, empty series handling, or any auth/rate-limit considerations that would matter to an agent deciding whether this call is safe or 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 tight and front-loaded: one sentence captures the core behavior and scope, followed by a compact, well-labeled argument list. Every sentence earns its place, and the Args block is justified because the schema provides no descriptions.
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, the description does not need to explain return structureBasic correctness is fully covered: required parameter, optional parameter with default, and the data's granularity and downsampling behavior. It could add one detail: that series availability may depend on activity type (e.g., power for cycling, pace for running), but this is a minor gap given the supported series list.
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%, yet the description fully compensates for both parameters. It explains that activity_id is the Garmin activity ID from get_recent_activities, and that max_points caps samples per series with its default value. This goes well beyond the bare schema, adding provenance and semantics that an agent needs to call the tool correctly.
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 what the tool returns: second-by-second chart data of an activity as named series, and it enumerates the series types (heart rate, pace, altitude, cadence, power, temperature...). This specificity distinguishes it from activity-level summaries like get_activity_details and single-series timelines like get_heart_rate_timeline. The only minor weakness is that it omits an explicit verb like 'retrieve', but the meaning 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?
The description conveys when to use the tool (when you need multi-series intra-activity chart data) and provides the prerequisite that activity_id comes from get_recent_activities. However, it does not explicitly mention alternatives or exclusions, such as 'if you only need heart rate, use get_heart_rate_timeline'. The usage context is clear but not fully explicit about routing among the many sibling timeline endpoints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_activity_typed_splitsC
Typed splits of an activity (e.g. climb/descent segments, swim lengths, interval work/rest).
Args: activity_id: Garmin activity ID.
| Name | Required | Description | Default |
|---|---|---|---|
| activity_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior. It lists example split types but does not mention return format, how typed splits differ from other split data, whether data may be missing for certain activity types, or any other behavioral nuance. The presence of an output schema reduces the need to describe return structure, but the behavioral description remains thin.
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 and front-loaded with the core concept and examples, then a single parameter line. The 'Args:' section is somewhat redundant with the input schema, but the overall length is appropriate and every non-redundant part 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 one-parameter data retrieval tool with an output schema present, the core invocation requirements are covered: an agent knows the resource and the required activity_id. However, the description does not address the relationship to similar siblings or the circumstances under which typed splits would be available, leaving a moderate gap in full contextual 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 compensate. The line 'activity_id: Garmin activity ID' adds the key semantic that the ID is a Garmin activity identifier rather than an arbitrary string. This is minimal but sufficient for a single self-explanatory parameter.
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 as 'typed splits of an activity' and gives concrete examples (climb/descent, swim lengths, intervals), so an agent can understand what the tool returns. It does not explicitly differentiate from the closely related sibling get_activity_split_summaries, but the term 'typed splits' plus examples is enough for basic purpose clarity.
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 instead of alternatives like get_activity_split_summaries or get_activity_details. The context is only implied by the resource name; there are no exclusions or conditions that would help an agent decide between closely related activity-split tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_activity_weatherA
Weather conditions recorded during an activity (temp, humidity, wind).
Units follow your Garmin account's measurement system (US accounts report degrees Fahrenheit and mph).
Args:
activity_id: The activity's numeric Garmin ID, from get_recent_activities.
| Name | Required | Description | Default |
|---|---|---|---|
| activity_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| temp | No | |
| dew_point | No | |
| wind_gust | No | |
| wind_speed | No | |
| activity_id | Yes | |
| description | No | e.g. Fair, Cloudy, Rain. |
| observed_at | No | |
| station_name | No | |
| apparent_temp | No | |
| relative_humidity | No | |
| wind_direction_compass | No | |
| wind_direction_degrees | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses that units follow the Garmin account's measurement system, which is useful behavioral context. However, it doesn't mention any side effects (likely none for a read operation), error conditions, or what happens if the activity has no weather data. The description adds some value but lacks depth.
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 well-structured. It starts with a clear one-sentence summary, then provides a note about units, and finally documents the parameter. Every sentence adds value, and it's appropriately sized for a simple tool with one 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?
Given the tool's simplicity (one parameter, no annotations, output schema exists), the description is fairly complete. It explains the data returned (temp, humidity, wind) and the unit system. It doesn't detail the output structure, but the output schema likely covers that. The only gap is not mentioning what happens if no weather data is available, but that's minor.
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 explains that activity_id is the numeric Garmin ID and references get_recent_activities for obtaining it, which adds meaning beyond the schema's bare type definition. This is helpful for the agent to know how to source the parameter.
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 retrieves weather conditions recorded during an activity, listing specific data types (temp, humidity, wind). It distinguishes from siblings by focusing on weather data, which is unique among the listed tools. However, it doesn't explicitly contrast with any sibling, so it's 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 usage by requiring an activity_id from get_recent_activities, which provides context on when to use it (after fetching activities). It doesn't explicitly state when not to use it or mention alternatives, but the dependency on get_recent_activities gives some guidance. No explicit exclusions or alternative tools are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_all_day_eventsA
Timeline of everything Garmin detected during the day: activities, naps, sleep, stress events.
Args: date: Calendar date in YYYY-MM-DD format. Defaults to today.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It does convey meaningful behavior: the tool returns a chronological aggregate of multiple event types for a single day. However, it does not state safety/read-only status, auth expectations, or edge behavior around date/time zones, which would be more transparent without 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 main behavior is front-loaded in one clear sentence, and the parameter documentation is compact and useful. There is no filler or repetition of the schema.
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-style tool with an output schema present, the description is nearly complete. The main missing piece is guidance about when to choose this tool over sibling daily or timeline tools; otherwise the agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates for the single parameter by specifying the date format (YYYY-MM-DD) and the default behavior ('Defaults to today'). This adds real meaning beyond the bare schema property, though it could still clarify timezone handling for 'today'.
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 clear: it lists a resource ('Garmin events during the day') and covers the event categories (activities, naps, sleep, stress events). It does not explicitly contrast itself with similarly named siblings like get_daily_summary, get_activities_by_date, or get_sleep, so it misses the extra step of sibling differentiation.
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 gives no direct guidance about when to use this tool instead of alternatives. The broad 'timeline of everything' phrasing implies an aggregate use case, but there is no mention of exclusions or when a more specific sibling such as get_sleep or get_stress would be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_badgesA
Badges earned and badges in progress, with points and dates.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It correctly implies a read-only operation with no inputs and no side effects, which is accurate for this tool. It adds useful context about what is included (earned vs. in-progress badges, points, dates) but does not disclose pagination, freshness, or error behavior—minor for a simple no-param read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, information-dense sentence with no wasted words. It front-loads the resource and distinguishes the two result categories. Given the tool's zero parameters, this size is appropriate.
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 tool, the description is largely sufficient: it defines the output scope and requires no input. The presence of an output schema reduces the need to document return values. However, it lacks any guidance on how badges relate to other achievement-style tools (e.g., get_goals) or any note on update frequency.
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 in the schema, so schema description coverage is trivially 100%. Since the tool requires no inputs, there is nothing for the description to clarify beyond confirming it takes no arguments, which the schema itself already makes clear.
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 ('get') and resource ('badges'), and clearly distinguishes two output categories: badges earned and badges in progress. It adds point and date details that go beyond a bare restatement of the title. However, it does not explicitly distinguish itself from the sibling get_goals or get_progress_summary, which could overlap in intent.
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 this is a read-only, no-parameter query for badge status, which an agent can infer from the zero-parameter schema and the absence of any side-effect language. However, there is no explicit when-to-use guidance or mention of alternatives among the many sibling get_* tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_blood_pressureB
Blood pressure readings logged in Garmin Connect over a date range (default last 30 days).
Args: start_date: YYYY-MM-DD. Defaults to 30 days ago. end_date: YYYY-MM-DD. Defaults to today.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | ||
| start_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description must disclose behavioral traits. It states that readings are 'logged in Garmin Connect' and implies a read-only operation, but it omits details like whether it returns raw readings or aggregated values, authentication requirements, or rate limits. The minimal information is correct but insufficiently rich for a zero-annotation tool.
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 efficient: a single purpose sentence followed by a compact args section. It front-loads the core functionality and keeps argument details separate, with no unnecessary prose.
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 tool with two optional parameters and an existing output schema, the description covers the essential input handling. However, it does not explain edge cases (e.g., behavior when no data exists) or any constraints beyond date format. It is adequate for basic usage but lacks depth for nuanced scenarios.
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 provides no description for parameters (0% coverage), so the description fully compensates by explaining the format (YYYY-MM-DD) and defaults for both start_date and end_date. This gives clear semantic meaning beyond the bare 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 clearly states it retrieves blood pressure readings from Garmin Connect over a date range, which is a specific verb-resource combo. It differentiates from other get_* tools by naming the specific data type, though it does not explicitly mention sibling tool 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?
There is no guidance on when to use this tool versus others, nor any exclusions or alternative tool suggestions. The description implies usage (retrieve BP data for a range) but provides no context about typical use cases or how it differs from similar metric tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_body_batteryA
Body battery values across the day, plus min, max, charged, and drained totals.
Args: date: Calendar date in YYYY-MM-DD format. Defaults to today.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| date | Yes | |
| charged | No | |
| drained | No | |
| timeline | No | |
| max_value | No | |
| min_value | No | |
| current_value | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the output includes min, max, charged, and drained totals, and that the date parameter defaults to today. However, no annotations exist, and the description does not cover potential errors, permissions, or response format beyond the output schema. It is adequate but not exhaustive.
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 with two sentences, no redundant information. It could be slightly more structured (e.g., bullet points), but it is efficient and front-loaded.
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 (so return values need not be explained) and only one parameter, the description covers the essential purpose and parameter format. It omits potential edge cases (e.g., no data for a date) but is complete enough for a simple read 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 input schema shows one optional 'date' parameter with no description, but the tool description adds format ('YYYY-MM-DD') and default behavior ('Defaults to today'). With 0% schema description coverage, this adds meaningful context beyond 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 clearly states the tool retrieves 'Body battery values across the day, plus min, max, charged, and drained totals.' This specific verb+resource combination distinguishes it from sibling tools like get_sleep or get_steps_and_calories.
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. The description only states what it does, without mentioning prerequisites, exclusions, or comparison to other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_body_battery_eventsA
Body Battery charge/drain events for a day (sleep, activities, stress) with their impact.
Args: date: Calendar date in YYYY-MM-DD format. Defaults to today.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of explaining behavior. It discloses that this is an event-based view of Body Battery with impact associations, but it does not discuss timezone handling, data availability, or any caveats beyond the basic returned content.
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 one-sentence functional summary followed by a two-line args block contains all necessary information with no filler. The key event/impact detail is front-loaded.
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 optional input with an output schema present, date format and default are enough to call the tool. It lacks only sibling-route guidance and contextual caveats such as timezone/availability, but the low parameter complexity keeps this from being a serious 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 schema for the only parameter only says type/default, while the description supplies the required YYYY-MM-DD format and the 'defaults to today' behavior. This fully compensates for the 0% schema description coverage.
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 – Body Battery charge/drain events – and constrains it to a single day with categories (sleep, activities, stress) and impact. It is clear, but it does not explicitly differentiate it from the sibling get_body_battery or get_daily_summary, so it stops short of full sibling distinction.
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 siblings like get_body_battery or get_daily_summary. The phrase 'for a day' only describes the data scope, not selection criteria or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_body_compositionA
Weight, body fat, and muscle-mass trend over recent days.
Returns one row per day Garmin has a reading for, plus the latest weight and average over the window.
Args: end_date: End of the window in YYYY-MM-DD format. Defaults to today. days: Window size in days. Capped at 90.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| end_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| days | No | |
| note | No | |
| avg_weight_kg | No | |
| latest_weight_kg | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses the return format (one row per day, latest weight, average) and capping at 90 days, but omits other behavioral traits like authentication or idempotency.
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?
Reasonably concise, covering purpose and args in a few sentences. Slightly verbose but no wasted words. Front-loaded with main purpose.
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 simplicity (2 optional params) and presence of output schema, the description adequately explains inputs and output shape. Lacks mention of potential errors or advanced usage.
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 description must compensate. It does so by explaining both parameters: end_date format with default, days default and cap, adding clarity beyond the bare 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 clearly states it returns weight, body fat, and muscle-mass trend over recent days. It differentiates from siblings like get_sleep or get_body_battery by focusing on body composition, though it doesn't explicitly contrast with similar 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?
Usage is implied: use when you need body composition data. No explicit guidance on when not to use or alternatives among siblings, leaving the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cycling_ftpC
Cycling Functional Threshold Power (FTP) and power zones.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden. It states what data is returned but says nothing about read-only nature, permissions, data freshness, or any side effects. It does not contradict annotations (none exist) but fails to disclose any behavioral traits beyond the basic output.
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 one short, waste-free phrase, but it is under-specified rather than efficiently concise. It lacks a verb and front-loaded action, and while it contains no fluff, it does not structure the purpose in a helpful way 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?
Even though an output schema exists, the description does not provide context about the data's meaning, time range, or relationship to sibling tools. With many similar getters, the absence of differentiation makes it incomplete for an agent to decide when to call it.
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 trivially covers everything. The description need not explain parameters. Baseline for 0 parameters is 4, and no additional parameter info is required.
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 'Cycling Functional Threshold Power (FTP) and power zones' indicates the resource and content, but lacks an explicit verb like 'retrieves' or 'returns'. It distinguishes from siblings somewhat by mentioning both FTP and power zones, but does not clarify scope (e.g., current vs historical). It is not a tautology, but it is a noun phrase rather than a clear action statement.
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 get_activity_power_zones or get_lactate_threshold. No context, exclusions, or alternative references are provided, leaving the agent to guess based on name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_daily_briefingA
One-call morning snapshot: sleep, HRV, Body Battery, readiness, load, and RHR.
Fuses the individual recovery and training-load tools into a single payload so
you can reason across them in one shot instead of making six separate calls.
Each section is fetched independently and concurrently; a section that fails
comes back null and is named in sections_unavailable rather than
failing the whole briefing. Also returns rhr_vs_baseline_bpm, the most
recent resting HR relative to its trailing average.
The server returns facts only and computes no training advice — interpret the numbers yourself (e.g. weigh readiness, HRV status, and Body Battery together).
Args: date: Calendar date in YYYY-MM-DD format. Defaults to today. The sleep, Body Battery, and training-readiness sections honour this date; the HRV, training-load, and resting-HR sections always report their own most-recent trailing window. For the default (this-morning) call everything lines up; passing a past date yields a mixed snapshot.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| hrv | No | |
| date | Yes | Calendar date the briefing is anchored to, YYYY-MM-DD. |
| sleep | No | |
| body_battery | No | |
| training_load | No | |
| resting_heart_rate | No | |
| training_readiness | No | |
| rhr_vs_baseline_bpm | No | Most recent resting HR minus the trailing average of the prior days in the window. Positive means elevated vs baseline (often a recovery or illness signal). Null when fewer than two days of data exist. |
| sections_unavailable | No | Names of sections that could not be fetched for this briefing. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of disclosure. It fully describes the independent, concurrent fetching behavior, the fact that failed sections return null and are named in sections_unavailable rather than failing the whole call, and the mixed-date semantics. It also states that no advice is computed, setting clear expectations about the output's scope.
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 well-structured: it opens with a punchy summary, then explains the aggregation benefit, error handling, and parameter semantics. Every sentence adds essential information—there is no fluff. The length is justified by the need to explain subtle behaviors like partial failures and date handling, making it concise despite its word count.
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 complexity (a composite of six data sources) and the existence of an output schema, the description provides sufficient context for an agent to understand the tool's nature, its error tolerance, and how to interpret results. It covers the main integration points and caveats without needing to enumerate return fields, which the output schema presumably handles.
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 provides zero description coverage for the 'date' parameter. The description compensates thoroughly by specifying the format (YYYY-MM-DD), its default (today), and exactly which sections honor it versus which always report trailing windows. This gives the agent complete instructions on how to set the parameter correctly for different query intents.
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 purpose as a 'One-call morning snapshot' aggregating six specific metrics (sleep, HRV, Body Battery, readiness, load, RHR). It explicitly distinguishes itself from sibling tools by noting it fuses the individual recovery and training-load tools into a single payload, making it obvious how it differs from get_sleep, get_body_battery, etc.
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 provides explicit guidance on when to use this tool ('instead of making six separate calls') and explains the intended use case (reasoning across multiple metrics in one shot). It also clarifies that the server returns facts only and no training advice, which subtly tells the agent not to expect recommendations. The detailed date behavior further specifies how to use the parameter correctly across different scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_daily_steps_rangeA
Steps, distance and step goal per day over a date range (default last 14 days).
Args: start_date: YYYY-MM-DD. Defaults to 14 days ago. end_date: YYYY-MM-DD. Defaults to today.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | ||
| start_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavior disclosure. It does communicate the output content (steps, distance, step goal per day) and the default date-range behavior. It does not, however, mention read-only behavior, timezone assumptions, inclusive/exclusive boundaries, or any limits, which would further help the agent understand operational 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 compact and well-structured: a one-line summary followed by a minimal Args block. Every sentence adds value, and the default behaviors are placed in the most relevant section without unnecessary filler.
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, the presence of an output schema, and the thorough documentation of both optional parameters and their defaults, the description provides everything an agent needs to invoke this tool correctly. No critical contextual information is missing for this retrieval 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 input schema provides no description coverage and only generic null/string types with null defaults. The description compensates fully by specifying the exact format (YYYY-MM-DD) and the meaningful default for each parameter (14 days ago, today), making both parameters semantically clear.
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: daily steps, distance, and step goal over a date range. It is specific about the granularity ('per day') and scope ('over a date range'), though it lacks an explicit verb and does not differentiate itself from similar step-related siblings like get_steps_timeline or get_steps_and_calories.
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 useful invocation context by explaining default date behavior (last 14 days, end_date defaults to today). However, it gives no guidance about when to use this tool instead of the many closely related analytics tools in the sibling list, and it does not state any exclusions or alternative-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_daily_summaryA
Everything Garmin records for one day in a single call.
Steps, distance, calories (active/BMR/total), floors, intensity minutes, heart rate (resting/min/max/last), stress, Body Battery, SpO2, respiration, sleep seconds and more. Best first call for "how was my day".
Args: date: Calendar date in YYYY-MM-DD format. Defaults to today.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does reveal that the call aggregates all daily metrics in one call and which metrics are included, but it does not explicitly state the operation is read-only, nor does it describe edge cases like missing data, timezone handling, or response size. The 'single call' trait is useful but the safety profile is left implicit.
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 and front-loaded with the core purpose, followed by a useful but not exhaustive list of metrics. The 'and more' tail is slightly vague but acceptable; the content earns its place. It is appropriately sized for a tool of this scope.
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 complexity and the presence of an output schema, the description does not need to detail return types. It covers the primary use case, the parameter, and the breadth of data. It could be more complete by addressing what happens when data is unavailable for a date, but the current level is adequate for a first-call summary 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 provides only a bare 'date' property with a null default, so the description's explicit 'Calendar date in YYYY-MM-DD format. Defaults to today' adds essential semantic value. It fully compensates for the 0% schema description coverage and leaves no ambiguity about how to supply the parameter.
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 opens with 'Everything Garmin records for one day in a single call', which clearly states the verb (get), resource (daily Garmin data), and aggregate scope. It distinguishes itself from metric-specific siblings like get_sleep or get_stress by emphasizing the all-in-one nature and adding 'Best first call for "how was my day"'.
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 'Best first call for "how was my day"' gives a clear contextual use case for starting with this tool before drilling down into specifics. It does not, however, explicitly state when not to use it or name alternative tools for narrower needs, so it falls short of full exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_devicesA
Registered Garmin devices and the last-used device with its last sync time.
Use this to know how fresh the data is: if the watch has not synced recently, intraday values will be stale.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the tool's output (registered devices, last-used device, last sync time) and adds behavioral context about data freshness implications. It does not explicitly state read-only, but the nature of 'get' plus the informational content implies a non-mutating operation. The added freshness context goes beyond a bare listing.
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 sentences, with the core result stated first and the usage guidance second. Every sentence earns its place, no fluff, and the key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema exists (as indicated by context signals), the description fully covers what the tool does and why it matters. It explains the freshness implication, which is the main contextual value. There is no missing information that an agent would need to call this tool 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?
The tool has zero parameters, so the description does not need to explain any. According to the rubric, a zero-parameter tool gets a baseline of 4. The description adds no parameter-related info, but none is required.
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: 'Registered Garmin devices and the last-used device with its last sync time.' It clearly identifies what the tool returns and is distinct from sibling tools that focus on individual metrics like sleep, steps, or heart rate. 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?
The description provides explicit guidance on when to use the tool: 'Use this to know how fresh the data is.' It explains the consequence of stale sync (intraday values will be stale), which directly helps an agent decide to call this before other data tools. It doesn't mention alternatives, but there is no sibling with a similar purpose, so the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_endurance_scoreA
Garmin endurance score with its activity-type contributors.
The endurance score reflects accumulated aerobic capacity across activities. It only updates after qualifying activities, so a given day may have no value.
Args: date: Calendar date in YYYY-MM-DD format. Defaults to today.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| date | Yes | |
| note | No | |
| contributors | No | |
| overall_score | No | Garmin endurance score. |
| classification | No | Garmin classification band id (higher is more trained). |
| gauge_lower_limit | No | |
| gauge_upper_limit | No | |
| feedback_phrase_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden. It discloses that the score may be absent for a given day due to qualifying activity requirements, which is a useful behavioral trait. However, it doesn't mention read-only status, potential errors, or other operational details beyond that single caveat, so transparency 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 concise and well-structured: a one-line purpose, a short explanation, and a parameter block. Every sentence adds value, with no fluff or redundancy.
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 simplicity and the presence of an output schema (which likely details the result structure), the description covers purpose, parameter, and a key edge case (missing values). It might benefit from elaborating what 'activity-type contributors' means or the score's range, but the core functionality is sufficiently 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?
The description fully explains the single parameter: 'date' in YYYY-MM-DD format with a default of today. This is essential because the input schema only lists the property without any documentation. The description adds all needed semantic meaning.
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 returns the Garmin endurance score with activity-type contributors. The verb 'get' plus the resource 'endurance score' is specific, and it distinguishes from sibling tools like get_hill_score and get_training_load by focusing on a distinct 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?
The description explains that the score only updates after qualifying activities, implying that on some days no value may exist. This gives context for when to expect data and why results may be absent, though it doesn't explicitly compare with alternatives. The context makes appropriate use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fitness_ageB
Garmin fitness age with its components (VO2 max, BMI/body fat, RHR, vigorous days).
Args: date: Calendar date in YYYY-MM-DD format. Defaults to today.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose read-only behavior, permissions, or side effects. It only lists output components and the default date behavior; it does not explicitly confirm the operation is safe or describe rate/usage limits.
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 brief and front-loaded with the core resource, but the first sentence is a fragment without an explicit action verb. The Args block is clean and contributes 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?
With an output schema available and only one well-documented parameter, the tool is easy to invoke. It could be improved by adding a brief note about its relationship to fitness metrics tools, but it is not severely incomplete for a simple getter.
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 single date parameter is fully explained with format (YYYY-MM-DD) and default behavior (today), compensating for the 0% schema description coverage. This is exactly the semantic information an agent needs.
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 (Garmin fitness age) and enumerates its components, which distinguishes it from generic metrics tools. However, it is a noun phrase rather than a verb+resource sentence, and it does not explicitly contrast with sibling tools like get_fitness_metrics.
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 on when to choose this tool over siblings is provided. There is no mention of alternatives, exclusions, or prerequisites, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fitness_metricsA
VO2 max (running and cycling), fitness age, and predicted race times.
Combines Garmin's "max metrics" tile (VO2 max, fitness age) with current race-time predictions for 5K, 10K, half marathon, and marathon.
Args: date: Calendar date for the VO2 max snapshot in YYYY-MM-DD format. Defaults to today.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| date | Yes | |
| note | No | |
| fitness_age | No | |
| vo2_max_cycling | No | ml/kg/min for cycling. |
| vo2_max_running | No | ml/kg/min for running. |
| race_predictions | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavioral disclosure. It explains the output content (VO2 max, fitness age, race times) and the date parameter defaults, but does not mention side effects, required permissions, data freshness, or error conditions. Adequate but lacks depth.
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 with a brief summary followed by an Args section. It avoids unnecessary words. However, the Args block somewhat duplicates information already present in the schema (though adds format context). Overall well-structured and front-loaded.
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 presence of an output schema (return value details not needed in description), the description adequately covers the tool's purpose. However, it lacks information about edge cases (e.g., no data for the given date), potential errors, or the relationship between the date and race predictions. Could be more 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?
The schema has zero description coverage, but the function description includes an Args block that explains the 'date' parameter's format (YYYY-MM-DD) and default (today). This adds significant semantic value beyond the schema's type definition. The explanation is clear and helpful.
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 that the tool retrieves VO2 max (running and cycling), fitness age, and predicted race times for 5K, 10K, half marathon, and marathon. It uses specific verb+resource structure and distinguishes itself from sibling tools (e.g., strength workouts, sleep) by focusing on fitness metrics.
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 fitness metrics like VO2 max and race times are needed, but it does not provide explicit guidance on when to use this tool versus its siblings, nor does it state conditions or alternatives. No 'when to use' or 'when not to use' directives are present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_floorsB
Floors climbed and descended for a day, with the intraday timeline.
Args: date: Calendar date in YYYY-MM-DD format. Defaults to today.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It clearly states the output covers floors climbed and descended with an intraday timeline, and mentions the date parameter defaults to today, which is helpful. However, it doesn't disclose details like whether the data is real-time, the granularity of the timeline, or potential limitations, leaving some ambiguity. No contradictions with annotations since none are provided.
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 succinct: two sentences that convey the purpose and the only parameter. It is front-loaded with the main functionality, and every sentence provides necessary information. No redundancy.
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 simplicity (one optional parameter) and the presence of an output schema that likely describes the return structure, the description is mostly complete. It explains what the tool returns (floors climbed/descended, intraday timeline) and the parameter. However, it lacks context on typical use cases or any caveats about the data, but these are minor for such a straightforward 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?
Schema description coverage is 0%, so the schema alone does not explain the parameter's meaning. The description clarifies the date is in YYYY-MM-DD format and defaults to today, which adds value. However, it doesn't elaborate on the format's specifics (e.g., timezone handling) or any constraints, leaving 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 states a specific action: retrieving floors climbed and descended for a day, with an intraday timeline. This clearly distinguishes it from other sibling tools that focus on steps, heart rate, or other metrics. However, it doesn't explicitly name a sibling it complements or differs from, but the resource is specific enough.
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 querying daily floor data with an optional date, but does not explicitly state when to use this tool over others, such as get_steps_and_calories or get_daily_summary. It provides a default for the date parameter, which gives some context, but lacks explicit exclusions or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gearB
Gear registered in Garmin Connect (shoes, bikes) with total distance and activity counts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It mentions the data returned (shoes/bikes, total distance, activity counts) but does not explicitly state that this is a read-only retrieval, how gear is scoped, or whether any authentication or sync behavior is involved. The description adds limited context beyond the tool name.
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 one concise sentence that front-loads the core resource ('Gear registered in Garmin Connect') and then clarifies the target items and included metrics. Every word earns its place, with no wasted content.
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 tool with an output schema, the description covers the resource and key return metrics, so invocation is possible. However, it lacks usage context and fails to distinguish itself from related sibling tools, leaving the agent without guidance on when this is the right choice.
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 baseline is 4. The description adds useful context about the returned fields (total distance and activity counts), which is more than the empty schema alone provides.
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 that the tool returns gear registered in Garmin Connect, specifically shoes and bikes, with total distance and activity counts. This clearly identifies the resource and scope. It does not explicitly contrast with the sibling tool get_activity_gear, so it stops short of full sibling differentiation.
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 get_activity_gear or other gear-related endpoints. No context about prerequisites, account requirements, or exclusions is provided. The agent must infer usage solely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_goalsA
Goals set in Garmin Connect (steps, distance, weight...) with progress.
Args: status: active, future or past. Defaults to active.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | active |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It discloses that the result includes progress and supports filtering by active/future/past, and the name clearly signals a read operation. It does not describe the output structure or any edge cases, but those are less critical given the output schema exists.
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 and front-loaded: the purpose appears first, and the parameter details are cleanly separated. Every sentence contributes useful information with no filler or redundancy.
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 tool with one optional parameter and an output schema, the description is nearly complete: it names the source, goal categories, progress inclusion, and status options. A short example or clarification of how progress is represented would make it complete, but nothing essential is missing.
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%, yet the description fully documents the only parameter: valid values ('active, future or past') and the default ('active'). This adds substantial meaning beyond the raw input schema and leaves no ambiguity about what to pass.
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 ('goals set in Garmin Connect') and its content (goal types and progress), which is clear enough for an agent to understand what the tool returns. However, it lacks an explicit verb like 'retrieves' or 'lists', and there are no sibling tools with a goal-focused purpose, so differentiation is not exercised.
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 Args section implies usage: call this tool to get goals and optionally filter by status, with a stated default of 'active'. It does not explicitly describe when to use it versus alternatives or list exclusions, but no sibling tool appears to cover goals, so the implied guidance is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_heart_rate_timelineA
Intraday heart rate for a day, including the most recent reading the watch synced.
Use this for "what is my heart rate now / this morning / at 15:30". The last_reading fields give the newest value Garmin has; readings are downsampled to ~max_points evenly spaced samples.
Args: date: Calendar date in YYYY-MM-DD format. Defaults to today. max_points: Maximum number of readings to return (default 96, i.e. ~15 min apart).
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | ||
| max_points | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| date | Yes | |
| note | No | |
| max_hr | No | |
| min_hr | No | |
| readings | No | Downsampled intraday readings (~2 min apart). |
| resting_hr | No | |
| readings_count | No | Number of raw readings Garmin returned. |
| last_reading_bpm | No | Most recent heart rate the watch synced. The closest thing to 'current' HR. |
| last_reading_time | No | Local time of last reading. |
| last_seven_days_avg_resting_hr | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and discloses important behaviors: readings are downsampled to ~max_points evenly spaced samples, and last_reading gives the newest value Garmin has. It does not cover timezone handling or data availability nuances, but the key behaviors are 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 compact, front-loaded with the core purpose, and uses a clear Args section. Every sentence adds value without fluff 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 tool with an output schema and only two optional parameters, the description covers purpose, usage, parameter semantics, and key behavioral details. Minor gaps remain around timezone interpretation and sampling edge cases, but nothing an agent needs to invoke it correctly is missing.
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%, but the description fully documents both parameters: date format with default, and max_points with default and a helpful semantic cue (~15 min apart). This compensates completely for the sparse 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 clearly states the tool returns intraday heart rate for a day, including the most recent synced reading. It uses a specific verb and resource and distinguishes it from sibling tools like get_resting_heart_rate by emphasizing the timeline and recent-reading aspect.
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 gives explicit usage guidance with examples like 'what is my heart rate now / this morning / at 15:30', which tells an agent when this tool is appropriate. It does not explicitly name alternatives or when-not-to-use scenarios, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hill_scoreA
Garmin hill score (climbing strength + endurance) for a date.
Combines a strength and an endurance component into an overall hill score.
Requires qualifying climbing efforts, so it is often empty for flat-terrain
athletes — an empty result is reported via note rather than an error.
Args: date: Calendar date in YYYY-MM-DD format. Defaults to today.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| date | Yes | |
| note | No | |
| vo2_max | No | |
| overall_score | No | |
| strength_score | No | |
| endurance_score | No | |
| classification_id | No | |
| feedback_phrase_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It transparently explains that the score combines strength and endurance, requires qualifying climbing efforts, and returns an empty result via `note` rather than an error. This is valuable contextual insight beyond a simple 'get' operation.
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 well-structured: a one-line summary, a brief explanatory note, and an Args section. Every sentence earns its place, and the formatting improves 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?
With an output schema available, the description does not need to explain return values. It covers the core purpose, the empty-result behavior, and parameter semantics, making it complete for a simple retrieve-by-date 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 description adds meaning beyond the bare schema by stating the date format (YYYY-MM-DD) and saying it defaults to today. However, the schema default is null, making the 'Defaults to today' claim ambiguous or potentially inconsistent with 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 clearly identifies the tool as retrieving a Garmin hill score for a date, and explains that it combines strength and endurance components. This distinguishes it from sibling tools like get_endurance_score and other metric-specific getters.
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 this tool (to get a hill score) and provides useful context about qualifying climbing efforts and empty results for flat-terrain athletes. However, it does not explicitly mention alternatives or state when not to use this tool versus other metrics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hrv_statusA
Current HRV status, baseline range, and the last 7 nights of readings.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | Overall HRV status, such as BALANCED or LOW. |
| feedback | No | |
| last_7_days | No | |
| weekly_avg_ms | No | |
| baseline_low_ms | No | |
| baseline_high_ms | No | |
| last_night_avg_ms | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral traits. It implies a read-only operation but does not explicitly confirm no side effects, whether authentication is required, or if the data is from the latest sync. The limited text fails to disclose important behavioral context beyond the basic data return.
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-loades the key output ('Current HRV status') and succinctly lists all return components. No redundant words or extraneous information; every word 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?
Given the tool has zero parameters and an output schema exists, the description adequately covers the main return values. It mentions three key data types (status, baseline, readings). However, it lacks details on how to interpret the status or baseline, and does not confirm if the output schema includes additional fields. But with low complexity, this is sufficient.
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 no parameters and schema coverage is 100%, so the baseline is 4. The description adds value by specifying what the tool returns (current status, baseline, last 7 nights), which is not obvious from the empty schema. It provides meaningful context beyond the schema structure.
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 states the resource (HRV status) and the specific data returned (current status, baseline range, last 7 nights). The verb is implied by the tool name 'get'. This clearly distinguishes it from sibling tools like get_sleep or get_stress, which cover other health metrics.
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 only lists what data is returned, without context on scenarios (e.g., checking readiness or recovery) or exclusions (e.g., not for real-time monitoring). Sibling tools exist for related metrics, but no comparison is made.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hydrationA
Hydration log for a day: intake in ml, goal, sweat loss estimate.
Args: date: Calendar date in YYYY-MM-DD format. Defaults to today.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the default behavior (date defaults to today) and the type of data returned. However, it does not mention permissions, error handling, or whether the data is read-only (though the 'get' prefix suggests so). This is minimal but not misleading.
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 sentences: the first front-loads the purpose and outcome fields, the second explains the single parameter concisely. No filler words or redundant 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?
Despite having an output schema (not shown), the description names the key fields (intake, goal, sweat loss) and explains the default behavior. For a simple one-parameter read tool, this provides sufficient context for an agent to call it correctly, though it could benefit from a note on timezone handling or data granularity.
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 shows a date parameter with a null default, but the description clarifies that the date is a calendar date in YYYY-MM-DD format and that it defaults to today. This adds meaningful semantic meaning beyond the schema, which is essential since schema coverage is 0%.
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 verb 'get' and the resource 'hydration log for a day', specifying the data fields (intake, goal, sweat loss). This distinguishes it from sibling tools like get_nutrition or get_lifestyle_log, as there is no other hydration-specific tool in the list.
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 daily hydration data but does not explicitly state when to use this tool versus alternatives or provide exclusion criteria. Among the many sibling tools, none overlap directly with hydration, so the context is fairly clear, but explicit guidance is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_intensity_minutesA
Moderate and vigorous intensity minutes for a day and the weekly goal progress.
Args: date: Calendar date in YYYY-MM-DD format. Defaults to today.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses that this is a per-day read with weekly goal progress and that the date defaults to today, but it does not mention data availability, timezone handling, or other behavioral edge cases. This is minimal but non-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 two short, front-loaded sentences with no filler. The key output is stated first and the parameter detail is secondary.
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-optional-parameter read tool with an output schema, the description is nearly sufficient to call it correctly. It lacks only broader usage/behavior context, which is already penalized in other dimensions.
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 single parameter is fully compensated: the description specifies YYYY-MM-DD format and clarifies that the null/default schema value resolves to today. This is exactly the meaning an agent needs beyond the bare 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 clearly identifies the resource as moderate and vigorous intensity minutes for a day plus weekly goal progress, which is distinct from the many sibling metric tools. It lacks an explicit verb and does not explicitly differentiate from alternatives like get_daily_summary, but the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 the many sibling get_* tools, and no exclusions or alternative routing are mentioned. The only implied usage is the metric name itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_lactate_thresholdA
Latest lactate threshold estimate (heart rate and pace/power) from Garmin.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full burden. It discloses that the data is the latest estimate and comes from Garmin, and includes heart rate and pace/power. It does not mention potential edge cases (e.g., data unavailability, permissions) or explicitly confirm read-only behavior. This adds some context but is minimal for a tool with no annotation support.
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 key information: what is returned (lactate threshold), the specific metrics (heart rate, pace/power), and the source (Garmin). Every word adds value, and there is no superfluous content.
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 tool with an output schema present, the description is sufficiently complete. It explains the data content and source, so an agent knows what to expect. No critical missing information stands out; the tool is simple enough that additional details like failure modes would be nice but are not essential.
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, so the baseline score is 4. The description adds no parameter-specific meaning because there are none to describe. There is no gap to compensate for, and the tool's zero-parameter nature is fully clear.
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 specific and unambiguous: it states the tool retrieves the latest lactate threshold estimate, including heart rate and pace/power, from Garmin. This clearly distinguishes it from sibling tools like get_resting_heart_rate or get_cycling_ftp. It uses a specific verb+resource structure without being redundant.
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 explicitly say when to use this tool versus alternatives, nor does it name any exclusions or sibling tools. However, the purpose is self-evident: an agent needing lactate threshold data would infer this is the correct tool. Its usage is implied but not directly stated, so it does not reach the level of clear context with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_last_activityA
The most recent activity recorded, with its summary metrics.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool returns the most recent activity with summary metrics, but it does not mention whether it can return null/empty, any authentication requirements, or side effects. For a simple zero-param getter, this is minimal but not misleading.
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 sentence with no fluff, front-loading the core function and scope. Every word contributes meaning, making it highly efficient and easy to parse.
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 tool with an output schema present, the description covers the essential purpose and content. It omits edge cases like missing data or error behavior, but given the simplicity and the schema's availability, it is adequately 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?
The input schema has zero parameters and 100% coverage, so there is nothing for the description to add. The baseline for zero-parameter tools is 4, and the description does not introduce any parameter-related confusion.
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 ('most recent activity') and what it provides ('summary metrics'), distinguishing it from get_recent_activities (plural) by its singular focus. However, it lacks an explicit verb like 'returns' or 'fetches,' and it does not reference sibling tools to aid differentiation.
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 the many activity-related siblings (e.g., get_recent_activities, get_activity_details). The description implies it is for the latest single activity, but it does not state exclusions or provide routing cues, leaving the agent to infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_lifestyle_logA
Lifestyle logging entries for a day (caffeine, alcohol, illness, travel, mood, etc.).
Args: date: Calendar date in YYYY-MM-DD format. Defaults to today.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. It makes clear this is a read operation (retrieves entries) and states the default behavior (defaults to today). However, it does not disclose what the output looks like, whether it includes all listed categories, or any error conditions. Since it's a simple getter, the read-only nature is implied but not explicitly stated. The description provides some transparency but lacks depth.
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, with the main purpose in the first line and parameter details in an Args block. It is front-loaded and contains no filler. Every sentence adds value. It is appropriately short for a simple getter.
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 simplicity of the tool (one optional parameter) and the presence of an output schema, the description covers the essential context. It tells the agent what data is returned and the parameter format. It does not mention edge cases (e.g., no entries for a date), but for a getter that is acceptable. The description is sufficient for 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?
The input schema has no descriptions (coverage 0%), so the description must compensate. It does so by explaining the date parameter: format YYYY-MM-DD and default to today. This adds meaningful context beyond the raw schema, which only defines type and default null. For a single optional parameter, this is adequate.
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 returns lifestyle logging entries for a day and lists common categories (caffeine, alcohol, illness, travel, mood). The verb 'get' is implicit in the tool name and the description implies retrieval. It distinguishes itself from siblings by focusing on lifestyle log data, though it doesn't explicitly contrast with similar getters like get_daily_summary or get_nutrition. Purpose is clear, but not strongly differentiated from all siblings.
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 provide any guidance on when to use this tool versus alternatives. It only mentions it's for a day, which is a temporal scope but not a usage condition. There are no exclusions or references to sibling tools. An agent would have to infer that lifestyle logging is distinct from other health metrics, but the description doesn't help with that decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_menstrual_dataB
Menstrual cycle tracking data for a date, if the feature is used.
Args: date: Calendar date in YYYY-MM-DD format. Defaults to today.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does disclose that data depends on the feature being used and that the date defaults to today, which are useful behavioral details. However, it does not describe what happens when the feature is not used or whether no result is returned, leaving some ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, opening with the purpose before giving the parameter details. Every sentence adds useful information, with no filler or redundancy. The Args block is compact and directly relevant.
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 getter with an output schema, the description covers the essential invocation details: what data is returned, the date format, and the default. Still, it omits any guidance about when this tool is appropriate versus the many sibling tools, and it could clarify the behavior when the menstrual cycle feature is disabled. The presence of an output schema reduces the need to explain return values, but the usage context gap remains.
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 parameter's meaning. It does so by specifying that 'date' is a calendar date in YYYY-MM-DD format and defaults to today, which adds meaningful information beyond the raw schema's string/null type. This is sufficient for the single optional parameter.
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 as menstrual cycle tracking data for a date, which is a specific and recognizable scope. It lacks an explicit verb like 'retrieves' or 'returns,' but the tool name and description together make the purpose clear. It does not explicitly differentiate from sibling getter tools, though the resource is unique enough to be identifiable.
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 any of the many sibling tools, such as get_daily_summary or get_lifestyle_log. The only contextual phrase, 'if the feature is used,' is more about data availability than about choosing this tool over alternatives. There are no exclusions or alternative tool mentions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_nutritionA
Food log and meals for a day (calories, macros) if nutrition tracking is used.
Args: date: Calendar date in YYYY-MM-DD format. Defaults to today.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden for behavioral disclosure. It usefully discloses that the tool returns food log/meals with calories and macros and that the date defaults to today. However, it does not explain what happens if nutrition tracking is not used or no data exists for the day, leaving a meaningful behavioral gap.
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 compact sentences plus a parameter note, with the core meaning front-loaded. Every sentence earns its place, and there is no redundant restating of the tool name or schema 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 simple getter with one optional parameter and an output schema present, the description covers the essential calling details: what it returns, the date format, and the default. The main remaining gap is the conditional 'if nutrition tracking is used' behavior, which leaves uncertainty about the no-tracking/no-data case. Overall it is nearly complete for its complexity.
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%, but the description fully compensates for the only parameter: it specifies the exact date format (YYYY-MM-DD) and the default behavior (today), which are the critical semantics an agent needs. The schema itself only lists the property as string/null with a null default, so the description adds substantial value beyond the structured definition.
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 specific resource (food log/meals for a day) and the payload content (calories, macros), so an agent can tell what data this tool returns. It lacks an explicit verb like 'retrieves' but the tool name 'get_nutrition' supplies that. It does not explicitly contrast with related siblings like get_lifestyle_log or get_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?
The phrase 'if nutrition tracking is used' provides a context condition, but there is no guidance on how to determine that condition or what alternative tool to prefer when it does not hold. It does not name sibling alternatives or exclusions. This is adequate implied usage, not explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_personal_recordsA
Personal records across activity types (fastest 1K/5K/10K, longest run, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| records | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must stand alone. It indicates the return is personal records across activity types, but does not disclose if records are all-time, how they are computed, or any limitations (e.g., real-time vs cached). Adequate but not detailed.
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?
Single sentence of 14 words, front-loaded with purpose. No wasted words.
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 no parameters, an output schema exists (documenting return structure), and the description provides concrete examples. For a simple data retrieval, this is sufficient. Could mention whether records are per user or global, but not critical.
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 parameters, so there are no parameters to document. The description adds value by listing examples of records returned. Per guidance, baseline for 0 params is 4, and this description meets that.
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 retrieves personal records across activity types, with specific examples (1K/5K/10K, longest run). This distinguishes it from all sibling tools, which deal with sleep, HRV, activities, etc.
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 on when to use this tool versus alternatives. Sibling tools are diverse (sleep, HRV, activities) so there is no direct overlap, but the description does not explicitly exclude any context or mention prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_progress_summaryA
Totals per activity type between two dates: distance, duration, elevation gain or moving time.
Use for "how many km did I run this month" or "hours of cycling this year".
Args: start_date: YYYY-MM-DD. Defaults to 30 days ago. end_date: YYYY-MM-DD. Defaults to today. metric: One of distance, duration, movingDuration, elevationGain, elevationLoss.
| Name | Required | Description | Default |
|---|---|---|---|
| metric | No | distance | |
| end_date | No | ||
| start_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry behavioral disclosure. It states the aggregation logic and default date behavior, but does not mention edge cases like empty results, date inclusivity, or data completeness. 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 compact and front-loaded with the core purpose, followed by concrete examples and a clear Args list. Every sentence earns its place with no redundancy.
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 the description doesn't need to explain return values. It covers purpose, usage, parameter formats, and examples. The main gap is not addressing edge cases or explicit grouping behavior, but it is sufficient for a simple summary 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?
Schema description coverage is 0%, so the description compensates well. The Args section provides formats (YYYY-MM-DD), defaults (30 days ago, today), and enumerates the valid metric values (distance, duration, movingDuration, elevationGain, elevationLoss), adding meaning the schema lacks.
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 'Totals per activity type between two dates: distance, duration, elevation gain or moving time.' This names a specific verb and resource, and clearly distinguishes it from sibling get_* tools by specifying aggregation by activity type and date range.
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?
Provides explicit use cases ('how many km did I run this month', 'hours of cycling this year') that clearly indicate when to call this tool. It does not name alternatives or exclusions, but the context is precise enough to select it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_activitiesA
List recent activities with type, duration, distance, and average heart rate.
Args: limit: How many of the most recent activities to return. Capped at 50.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| activities | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden. 'List' clearly indicates a read-only operation, and the cap on limit prevents overload. However, it could explicitly state non-destructive 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 extremely concise: two sentences plus a parameter description. The main purpose is front-loaded, and every sentence 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?
Given a single parameter, an output schema for return values, and no nested objects, the description covers all necessary information. No gaps remain.
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?
Despite a reported schema description coverage of 0%, the description fully documents the 'limit' parameter, explaining its purpose and a cap of 50. This compensates well for the missing schema coverage.
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 'List recent activities' with specific fields (type, duration, distance, heart rate). This verb-resource combination differentiates it from sibling tools like get_activity_details which provides detailed data for a single activity.
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 explicit when-to-use or when-not-to-use guidance is given. The description implies usage for a quick overview of recent activities, but does not contrast with alternative tools like get_activity_details for fuller details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_respirationA
Daily respiration rate: average, min, max, and waking vs. sleeping averages.
Args: date: Calendar date in YYYY-MM-DD format. Defaults to today.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| date | Yes | |
| note | No | |
| avg_breaths_per_min | No | |
| lowest_breaths_per_min | No | |
| highest_breaths_per_min | No | |
| avg_sleep_breaths_per_min | No | |
| avg_waking_breaths_per_min | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden for behavioral disclosure. It describes the output metrics well (average, min, max, waking vs. sleeping) but does not mention that the tool is read-only, data freshness, or any permissions needed. This is adequate but not thorough.
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, with a single sentence summarizing the output followed by a clear parameter definition. No wasted words; every sentence 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?
Given the tool has an output schema (not shown), the description does not need to detail return values. It already provides a good overview of the metrics returned. The context is simple (one optional parameter), and the description is complete enough for an AI agent to understand what the tool does and how to use it.
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 one optional parameter 'date' with 0% schema description coverage. The description compensates fully by specifying the format ('YYYY-MM-DD') and default behavior ('Defaults to today'), adding significant meaning beyond the raw schema type.
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 returns daily respiration rate with specific metrics (average, min, max, waking vs. sleeping averages). The verb 'get' and resource 'respiration' are explicit. It distinguishes from sibling tools like get_sleep and get_hrv_status which cover different health metrics.
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 on when to use this tool versus alternatives. The description only explains what it does, not context or prerequisites. For a health metrics tool, mentioning that it provides respiratory data as opposed to heart rate or sleep would help, but is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_resting_heart_rateA
Resting heart rate trend over the last days days.
Args: days: How many recent days to include. Capped at 28.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| days | Yes | |
| avg_rhr_bpm | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions the cap of 28 days, which is a useful constraint, but does not describe whether the tool is read-only, what side effects exist, or any rate limits. The read-only nature can be inferred from 'get' but is not explicit.
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 exceptionally concise: one sentence stating the purpose, followed by a brief structured Args section. Every word earns its place. No redundant phrases or filler.
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 simplicity (single parameter, obvious read operation) and the presence of an output schema, the description is sufficiently complete. It covers the main purpose and the parameter constraint. A minor gap is the lack of detail on trend format, but this is acceptable with an output schema.
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?
Despite the schema having no description for the parameter 'days', the tool description adds a clear explanation: 'How many recent days to include. Capped at 28.' This fully compensates for the missing schema description and provides practical usage semantics.
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 that the tool retrieves the 'resting heart rate trend over the last days.' The verb 'get' and resource 'resting heart rate trend' are specific and distinct from sibling tools like get_hrv_status or get_sleep. No ambiguity.
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 prerequisites, limitations, or scenarios where another tool would be more appropriate. Contextual usage remains completely implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_running_toleranceA
Garmin running tolerance (weekly mileage your body tolerates) over a range (default 12 weeks).
Args: start_date: YYYY-MM-DD. Defaults to 84 days ago. end_date: YYYY-MM-DD. Defaults to today.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | ||
| start_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the default date range (12 weeks, start 84 days ago, end today) and date format (YYYY-MM-DD), which are useful behavioral details. However, it does not explicitly state that this is a read-only query, nor does it describe any caveats like rate limits or response granularity, though the output schema exists.
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: a clear one-sentence purpose followed by a compact argument list. No filler, every sentence 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 two-parameter get tool with an output schema, the description covers the essential context: what the metric means, the default range, and parameter formats. It does not explain return values, but that is handled by the output schema. Minor gaps like timezone or parameter ordering are not critical.
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 does: both parameters are explained with format (YYYY-MM-DD) and default behavior (84 days ago, today). This adds meaning beyond the raw schema, though it omits constraints like start <= end or timezone handling.
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 metric (running tolerance) with a clarifying definition ('weekly mileage your body tolerates') and a default time range. This distinguishes it from sibling get_* metrics like get_training_load or get_fitness_metrics. However, it does not explicitly mention that it returns a series/list of values, which would strengthen the purpose statement.
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?
Usage is implied by the metric name and description ('running tolerance'), but there is no explicit guidance on when to prefer this over related tools or when not to use it. No alternatives or exclusions are mentioned, so an agent must infer applicability from the metric domain.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_scheduled_workoutsA
Training calendar for a month: scheduled workouts, completed activities, plan items.
Args: year: Four-digit year. Defaults to the current year. month: 1-12. Defaults to the current month.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | ||
| month | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It does disclose useful behavior such as defaulting year/month to the current values and returning a month-scoped calendar. However, it does not clarify timezone handling, whether future months include completed items, or whether this is purely read-only, though the operation is clearly non-destructive by nature.
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 and well-structured: a one-line purpose statement followed by terse, informative parameter definitions. Every sentence earns its place and the most important information is front-loaded.
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 query with two optional parameters and an output schema, the description is mostly complete. It explains the purpose and all parameter semantics, though a brief note distinguishing it from list_workouts would make it fully unambiguous for tool selection.
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 explain the parameters, and it does. It defines year as a four-digit integer defaulting to the current year and month as 1-12 defaulting to the current month. This adds real meaning beyond the bare 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 clearly identifies the resource as a month-long training calendar and lists the content categories returned (scheduled workouts, completed activities, plan items). It is understandable and specific, though it does not differentiate itself from sibling tools like list_workouts or schedule_workout.
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 explicit guidance is given about when to use this tool versus alternatives such as list_workouts or get_recent_activities. The description implies monthly calendar use, but it never states exclusions or selection criteria, so the agent must infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sleepA
Sleep duration, sleep stages, sleep score, and overnight HRV.
Args: date: Calendar date in YYYY-MM-DD format. Defaults to last night (yesterday). Pass today's date to get the most recent recorded sleep when you wake up.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| date | Yes | Calendar date for the sleep period, YYYY-MM-DD. |
| note | No | Set when no sleep data was found for the date. |
| avg_spo2 | No | |
| sleep_score | No | Garmin sleep score, 0 to 100. |
| awake_seconds | No | |
| sleep_quality | No | Qualitative label such as GOOD or POOR. |
| avg_respiration | No | |
| rem_sleep_seconds | No | |
| deep_sleep_seconds | No | |
| light_sleep_seconds | No | |
| total_sleep_seconds | No | |
| avg_overnight_hrv_ms | No | Average overnight HRV in milliseconds. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the data returned (duration, stages, score, HRV), but does not mention behavioral traits like error handling for missing dates, authentication needs, or rate limits. For a read-only tool, this is minimally adequate.
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, front-loading the key data items, and includes parameter details in a docstring style. It is efficient with words, but the parameter details could be integrated more seamlessly.
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 presence of an output schema (not shown but indicated), the description need not explain return values, though it does mention returned data. It explains the input parameter thoroughly. It is fairly complete for a simple retrieval tool, though it could mention what happens if no sleep data exists for the 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?
The schema has 0% description coverage for the date parameter. The description compensates fully by explaining the format (YYYY-MM-DD), default behavior (last night/yesterday), and a use case (today's date for most recent sleep). This adds significant meaning beyond the schema's type definition.
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 the verb (get) and resource (sleep data including duration, stages, score, HRV), and it distinguishes itself from sibling tools that deal with other health metrics (e.g., get_steps_and_calories, get_stress).
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 clear context on when to use the tool: defaults to last night, and suggests using today's date to get most recent sleep on waking. However, it does not explicitly exclude cases or mention alternatives, though among siblings it is unique.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_spo2A
Blood oxygen (SpO2 / pulse ox) for a day: average, lowest, latest, sleep average, timeline.
Args: date: Calendar date in YYYY-MM-DD format. Defaults to today.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It does reveal behavioral detail by listing the returned metrics and the date default, but it does not cover what happens for dates with no recorded data, data source assumptions, or any other runtime behavior. Adequate but thin.
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 resource-plus-scope statement is front-loaded, and the Args line earns its place by supplying format and default information the schema omits. Nothing needs to be cut.
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 a single optional parameter and the presence of an output schema, the description covers the essential ground: what the tool returns, the parameter format, and the default behavior. The only notable omission is empty/missing-data behavior, which is minor for a simple daily-metric 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?
Schema description coverage is 0%, so the description must compensate for the undocumented date parameter, and it does. It adds the concrete YYYY-MM-DD format and clarifies that a null/default date resolves to today, both of which the schema does not state. Only a small amount of extra semantics (e.g., valid date range) is missing.
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 (blood oxygen / SpO2 / pulse ox), a clear scope (a single day), and enumerates exactly what is returned (average, lowest, latest, sleep average, timeline). It is unambiguous and clearly distinct from the large sibling family, none of which covers SpO2.
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 when-to-use vs. when-not-to-use guidance and no alternatives are named. With overlapping siblings like get_respiration, get_daily_summary, and get_stats_and_body that could plausibly surface SpO2 data, the description leaves the agent to infer selection purely from the metric name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stats_and_bodyA
Daily stats merged with body composition (weight, BMI, body fat) for a date.
Args: date: Calendar date in YYYY-MM-DD format. Defaults to today.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It discloses the response content (daily stats merged with body composition dimensions) and the default-date behaviorی. It stops short of mentioning edge cases like missing data or error responses, but for a simple read-only getter this is adequate.
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 compact sentences: the first front-loads the tool's purpose, the second documents the sole parameter. No filler 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?
With only one optional parameter and an output schema present, the description fully covers what an agent needs to invoke the tool correctly. The date format and default behavior are explicit, and the return semantics are captured by the output schema rather than requiring explanation in prose.
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% and the schema only defines an optional string/null date. The description adds critical meaning: the date must be in YYYY-MM-DD format, represents a calendar date, and defaults to today. This fully compensates for the schema's lack of detail.
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 (get), a clear resource ('daily stats merged with body composition'), and enumerates the exact fields (weight, BMI, body fat). This distinguishes it from siblings like get_body_composition and get_steps_and_calories by emphasizing the merged nature.
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 gives clear context: use this to retrieve day-specific merged stats and body composition, with a default to today. It does not name alternatives or state when not to use it, but the merged-data framing makes the intended use case evident among the many sibling getter tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_steps_and_caloriesA
Daily step total, distance, calories, floors, and intensity minutes.
Args: date: Calendar date in YYYY-MM-DD format. Defaults to today.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| date | Yes | |
| step_goal | No | |
| total_steps | No | |
| bmr_calories | No | |
| floors_climbed | No | |
| total_calories | No | |
| active_calories | No | |
| total_distance_meters | No | |
| moderate_intensity_minutes | No | |
| vigorous_intensity_minutes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the full burden. It fails to mention that this is a read-only operation, any authentication requirements, rate limits, or potential gaps in data (e.g., missing values if device not worn). Merely stating 'daily...' is insufficient.
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 and direct, listing metrics first then parameter details. It could be slightly more structured (e.g., bullet points), but 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?
An output schema exists, so explaining return values is not required. The description covers the tool's primary purpose and the single parameter. Minor missing context like user scope or temporal range are not critical for this simple data retrieval 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?
Schema coverage is 0%, but the description fully explains the sole parameter: format ('YYYY-MM-DD'), meaning (calendar date), and default (today). This adds significant value beyond the schema's empty definition.
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 lists the metrics returned: daily step total, distance, calories, floors, and intensity minutes. This clearly distinguishes it from sibling tools like get_sleep or get_resting_heart_rate, which cover different health metrics.
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 (e.g., get_recent_activities for overall activity). The description does not specify context like data availability or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_steps_timelineA
Steps in 15-minute buckets across the day, with activity level per bucket.
Args: date: Calendar date in YYYY-MM-DD format. Defaults to today.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It usefully conveys the 15-minute bucketing and activity-level output, but it does not mention timezone handling, whether missing buckets are omitted or zero, or other non-obvious data 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 two short sentences plus an Args block. The main behavior is front-loaded, and every sentence adds useful information without 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 simple one-parameter read tool with an output schema, the description is largely complete: it explains the parameter format/default and the result granularity. It falls short only in lacking any distinction from closely related step tools and not addressing timezone/local-date semantics.
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 fully explain the only parameter. It does: it specifies the YYYY-MM-DD format and the 'defaults to today' behavior, which is not apparent from the schema's default null.
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: it returns steps in 15-minute buckets with activity level per bucket. This is clear and informative, though it does not explicitly contrast with siblings like get_steps_and_calories or get_daily_steps_range.
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 gives no guidance on when to use this tool versus alternatives. It does not mention scenarios, exclusions, or refer to sibling tools, so an agent gets no help choosing between the many similar get_* timeline/step tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_strength_setsA
Set-by-set breakdown of a logged strength session: exercises, reps, and weight.
Parses Garmin's recorded sets for one strength_training activity into
working sets (with the recognised exercise, rep count, and load) plus a
per-exercise rollup and total training volume. Rest periods are included and
flagged. Sets Garmin could not classify come back with a null exercise name.
Args:
activity_id: The activity's numeric Garmin ID, from get_recent_activities.
| Name | Required | Description | Default |
|---|---|---|---|
| activity_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| sets | No | |
| exercises | No | |
| total_reps | No | |
| activity_id | Yes | |
| total_volume_kg | No | Sum of reps x weight across working sets, in kg. |
| total_active_sets | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosure. It explicitly states that rest periods are included and flagged, and that unclassified sets return a null exercise name. It also describes the output includes per-exercise rollup and total volume, adding valuable behavioral context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a focused paragraph that front-loads the core purpose, then details output components and edge cases. It is efficient without being terse, and the Args section provides clear parameter context. No filler, though some redundancy in describing the breakdown could be tightened.
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 moderate complexity (one parameter, clear output structure) and the presence of an output schema, the description is reasonably complete. It covers input provenance, output content (working sets, rollup, volume, rest periods, nulls). It does not explicitly mention error cases or performance, but for a retrieval tool this 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?
The only parameter, activity_id, is described as 'The activity's numeric Garmin ID, from get_recent_activities.' This adds semantic meaning (numeric ID, source) that the schema (just a string type) lacks. With 0% schema description coverage, this compensation is essential and effective, though it could specify format (e.g., no URL encoding) but is sufficient.
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 it provides a 'set-by-set breakdown of a logged strength session' with exercises, reps, and weight. This is a specific verb+resource and distinguishes from siblings like get_activity_details (which likely returns general activity info) and preview_strength_workout (which is for planned 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?
The description explains it parses Garmin's recorded sets for a 'strength_training' activity and mentions the activity_id comes from get_recent_activities, giving context on how to obtain the required parameter. However, it does not explicitly state when not to use this tool versus alternatives, though the strength-specific focus implies it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stressB
Stress levels across the day with average, max, and time-in-zone breakdown.
Args: date: Calendar date in YYYY-MM-DD format. Defaults to today.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| date | Yes | |
| timeline | No | |
| avg_stress | No | |
| max_stress | No | |
| low_minutes | No | |
| high_minutes | No | |
| rest_minutes | No | |
| medium_minutes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses that the tool returns average, max, and time-in-zone breakdown, but does not cover permissions, data freshness, or handling of missing data. Adequate but not comprehensive.
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 clearly explaining the tool's output and parameter, with no wasted words. Well-structured and front-loaded.
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?
Output schema exists, so return values are presumably documented there. However, description only mentions three components, lacking explanation of time-in-zone or constraints. Adequate but could elaborate more.
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% (no descriptions in schema), but the description explicitly documents the 'date' parameter format (YYYY-MM-DD) and default (today), adding value beyond 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?
Description clearly states it retrieves stress levels with average, max, and time-in-zone breakdown, providing a specific verb and resource. However, it does not differentiate from sibling tools like get_sleep or get_hrv_status.
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 on when to use this tool versus alternatives, and no exclusions or prerequisites mentioned. The description lacks context for appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_training_loadB
Daily training load with acute and chronic load and current status.
Args: days: Number of recent days to summarise. Capped at 28.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| days | Yes | |
| acwr_status | No | Garmin's qualitative ACWR band, e.g. OPTIMAL, LOW, HIGH. |
| current_atl | No | |
| current_ctl | No | |
| acwr_percent | No | Acute:chronic workload ratio as a percentage (Garmin's load ratio). |
| current_status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions the 'days' parameter is capped at 28, which is useful, but it doesn't disclose whether this is a read-only operation, what the output structure looks like, or any side effects. For a data retrieval tool, the lack of explicit read-only confirmation is a gap.
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 with the core purpose. The Args section is clear and minimal. No wasted words, though it could be slightly more structured with a 'Returns' section.
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 (which likely describes the return structure), the description doesn't need to explain return values. However, with no annotations and a single parameter, the description is adequate but lacks context on when to use it versus similar metrics tools. The cap at 28 is a good detail, but more behavioral context 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%, but the description does explain the 'days' parameter ('Number of recent days to summarise. Capped at 28.'), adding meaning beyond the schema's type/default. However, it doesn't clarify the default behavior (7 days) or the exact format of the output, so it partially compensates but not fully.
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 returns 'Daily training load with acute and chronic load and current status', which is a specific resource (training load) with a clear scope (daily, acute/chronic/status). It distinguishes from siblings like get_training_readiness and get_fitness_metrics by focusing on load metrics, 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 by stating it summarizes recent days, but it doesn't explicitly say when to use this over get_training_readiness or get_fitness_metrics. The 'days' parameter is explained, but no guidance on typical use cases or exclusions is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_training_plansB
Training plans the user is enrolled in (Garmin Coach and custom plans).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, but it only states what is returned and not whether the operation is read-only, requires auth, or how it treats past/upcoming plans. The read-only nature is only implied by the 'get' prefix. Some scope information is added ('enrolled in', plan types), but safety and data-freshness behavior are not disclosed.
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 compact sentence with no filler, and the key phrase 'training plans the user is enrolled in' is front-loaded. It could be improved by using an explicit verb, but overall it is appropriately sized.
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 parameterless getter with an output schema, the description covers the core resource and scoping, and return values are left to the schema. Its main gap is the absence of guidance for choosing among the many sibling get/list tools, but the plan-type qualifier partially compensates.
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 there is no parameter semantics for the description to supplement; the baseline for a parameterless tool is 4. The description's mention of user-enrolled plans is enough context for an agent to understand what the empty invocation returns.
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 ('training plans') and the exact scope ('the user is enrolled in'), plus the plan types ('Garmin Coach and custom plans'). It lacks a verb, relying on the tool name for the action, but this is sufficient to distinguish it from sibling workout 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 gives no explicit guidance on when to use this tool instead of alternatives such as list_workouts or get_scheduled_workouts. The only hint is the 'enrolled in' scoping, which implies current/active plans but is not stated as a selection rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_training_readinessA
Daily training readiness score (0-100) with contributing factors.
The score reflects how prepared the user is to train, drawing on sleep, HRV status, recovery time, and recent training load.
Args: date: Calendar date in YYYY-MM-DD format. Defaults to today.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| date | Yes | |
| note | No | |
| level | No | Garmin readiness level, e.g. LOW, MODERATE, HIGH, PRIME. |
| score | No | 0-100 training readiness score. |
| factors | No | |
| acute_load | No | |
| hrv_status | No | |
| sleep_score | No | |
| feedback_long | No | |
| feedback_short | No | |
| stress_history | No | |
| recovery_time_hours | No | |
| sleep_history_score | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It mentions the score range and contributing factors but lacks details on staleness, required permissions, or whether it modifies state. It is a read-only metric, but more context on computation timing would help.
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 brief and front-loaded with the score range and factors. Every sentence is meaningful. The args section is clearly separated and concise.
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 that an output schema exists (not shown), the description doesn't need to detail return structure. It mentions contributing factors, which is useful. With only one optional parameter, the description is nearly complete, though it could hint at what the output looks like.
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%, but the description adds value by specifying the date format (YYYY-MM-DD) and default behavior (today). This compensates for the lack of schema description and provides clear parameter meaning.
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 it returns a 'daily training readiness score (0-100) with contributing factors' and specifies the factors (sleep, HRV, recovery time, training load). This distinguishes it from sibling tools that return individual metrics like get_sleep or get_training_load.
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 is for an overall readiness assessment but does not explicitly state when to use it over its siblings. No 'when not to use' or 'consider using X instead' guidance is provided, though the sibling list is available.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_profileB
User profile basics: display name, unit system, birth year, gender, height, weight.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It only lists output fields and says nothing about read-only behavior, error conditions, missing data handling, or authentication requirements. The 'get' prefix implies a read operation, but that is not explicitly stated, and no other behavioral traits are disclosed.
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, compact sentence that front-loads the resource ('User profile basics') and immediately enumerates the returned fields. There is no filler, redundancy, or unnecessary detail, making it highly efficient.
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 that the tool has no parameters and an output schema exists, the description adequately conveys the primary fields returned. However, the word 'basics' suggests the list may be a subset of the full profile, leaving slight ambiguity about whether fields like email or avatar are excluded. Still, for a simple parameterless getter, it is reasonably 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?
The tool has 0 parameters and 100% schema description coverage, so there is no parameter information to document. Per the calibration rules, a 0-parameter tool starts at baseline 4, and the description adds no parameter-specific meaning because none is needed.
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 lists the specific fields returned (display name, unit system, birth year, gender, height, weight), making the purpose clear. However, it lacks an explicit verb, relying on the tool name for 'get', and 'User profile basics' is a noun phrase rather than a full action statement. It is distinguishable from sibling tools like get_body_composition or get_devices because it covers general profile attributes, but the differentiation is implicit rather than stated.
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 gives no guidance on when to use this tool versus alternatives such as get_body_composition or get_fitness_metrics, which might also return height/weight or other profile-derived data. No context is provided about typical use cases, prerequisites, or scenarios where another tool would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_weekly_summaryA
Weekly aggregates for a single metric.
Args: metric: One of "steps", "stress", or "intensity_minutes". weeks: How many recent weeks to include. Capped at 12. end_date: End of the window in YYYY-MM-DD format. Defaults to today.
| Name | Required | Description | Default |
|---|---|---|---|
| weeks | No | ||
| metric | Yes | ||
| end_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| weeks | No | |
| metric | Yes | steps, stress, or intensity_minutes. |
| avg_value | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses caps on weeks (12), default values for end_date, and enumerates valid metric values. As no annotations are provided, the description carries full burden; it sufficiently describes the non-destructive read behavior and constraints.
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 well-structured: a clear one-line purpose followed by a bulleted list of parameter details. Every sentence adds value without redundancy.
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 output schema exists, the description appropriately focuses on input parameters and behavior. It covers metric options, weeks cap, and date format. Minor gaps like error handling for invalid metrics are omitted, but overall it's complete for a simple aggregation 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?
Despite schema description coverage being 0%, the description adds meaning for all 3 parameters: it explains metric values (steps, stress, intensity_minutes), weeks cap (12), and end_date format (YYYY-MM-DD) with default. This fully compensates for missing schema 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 clearly states the tool provides 'weekly aggregates for a single metric.' It lists the allowed metrics (steps, stress, intensity_minutes), making the purpose specific. However, it does not explicitly differentiate this tool from siblings like get_stress or get_steps_and_calories, which might also provide aggregate data.
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 context for when to use: for weekly aggregations of available metrics. It implies not for daily or multi-metric summaries. But it lacks explicit guidance on alternatives or when not to use this tool compared to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_weigh_insA
Every weigh-in (weight, BMI, body fat, muscle mass...) in a date range (default last 30 days).
Args: start_date: YYYY-MM-DD. Defaults to 30 days ago. end_date: YYYY-MM-DD. Defaults to today.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | ||
| start_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Compacted Garmin payload; null if unavailable. |
| note | No | Explains missing data or truncation. |
| params | No | Parameters used. |
| source | Yes | Garmin Connect API method the data came from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the behavioral disclosure burden. It does convey that the tool returns every weigh-in in a date range and lists the types of metrics included, which is useful. However, it does not mention pagination limits, whether both dates are inclusive, timezone handling, or any read-only guarantee beyond the 'get' naming convention.
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 compact parts: a front-loaded one-sentence purpose statement covering the resource and date range, followed by a minimal Args block. Every sentence adds information, and there is no filler or repetition of schema contents.
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 tool with two optional parameters and an output schema, the description adequately covers what the tool returns, the date range semantics, and parameter formats. It is complete enough for correct invocation, though it could have added a note about alternative tools for similar metrics or clarified inclusivity of the date boundaries.
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 provides only type/null info for two optional parameters with zero description coverage. The description compensates fully by specifying YYYY-MM-DD format for both start_date and end_date, plus their default behaviors (30 days ago and today). This is exactly the semantic detail an agent needs beyond 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 names a specific resource ('weigh-ins') and the key attributes it returns (weight, BMI, body fat, muscle mass), with a clear date-range scope. However, it does not explicitly distinguish this from similar sibling tools like get_body_composition or get_stats_and_body, so it stops short of full sibling differentiation.
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 a read-only historical query of weigh-ins within a date range, and provides defaults, but offers no guidance on when to choose this tool over alternatives such as get_body_composition or get_daily_summary. There are no explicit when-to-use or when-not-to-use instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workoutsA
List workouts saved in your Garmin Connect library (id, name, sport).
These are workout templates in the library — the source the watch syncs
from — not logged activities. Use the ids with delete_workout.
Args: limit: maximum number of workouts to return (default 50).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| workouts | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the operation is a list of templates, implies read-only behavior, and mentions the returned fields. It doesn't explicitly state it doesn't modify data, but for a listing operation this is reasonably transparent. It does not mention errors or side effects, but none are expected.
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 sentences: the first defines the action and output fields, the second clarifies the nature (templates) and provides a practical hint. It is concise, well-structured, and free of superfluous content.
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 gives sufficient context for a simple listing tool: it specifies the return fields, clarifies that these are templates, and indicates the primary use case (deletion). While it does not describe pagination or error handling, these are not critical for a basic list operation and the given information is enough for most use cases.
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 only parameter `limit` is fully described in the schema (integer, default 50). The description adds no additional meaning, but since schema coverage is 100%, a baseline score of 3 is appropriate.
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 lists workouts from the Garmin Connect library, specifies the fields (id, name, sport), and distinguishes these as templates rather than logged activities. This makes the purpose unambiguous and differentiates it from sibling activity-related 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 notes the tool is for templates (not logged activities) and suggests using the returned ids with `delete_workout`, giving a concrete use case. While it doesn't explicitly say 'use this instead of X', the contrast with logged activities provides clear guidance for when to select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_running_workoutA
Assemble a running workout and show what WOULD be created — no network call.
Validates the structure (one end condition per step, paired pace bounds,
pace format) and returns a readable summary, sanity warnings, and a
confirmation_token to pass to create_running_workout. Always call
this first and review the result.
Args: workout: the workout definition (name, steps and/or repeat groups).
| Name | Required | Description | Default |
|---|---|---|---|
| workout | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| summary | Yes | Human-readable step-by-step summary. |
| warnings | No | |
| confirmation_token | Yes | Pass to create_running_workout to confirm. |
| estimated_duration_seconds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full disclosure weight and exceeds the bar: 'no network call' declares the side-effect-free behavior, while validating single end condition per step, paired pace bounds, and pace format sets accurate expectations of what will be checked. The return contract (readable summary, sanity warnings, confirmation_token) is fully spelled out.
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 information-dense, front-loaded sentences deliver the core contract before a one-line token hand-off — almost no waste. The 'Args:' coda is slightly mechanical and adds little beyond what the schema title conveys, costing half a 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?
For a tool with a deeply nested schema (steps, repeat groups, end conditions) and an output schema present, the description ties everything together: behavior (validate + no network), return package (summary, warnings, token), and workflow. The only unspoken edge is what happens when validation fails — whether the tool errors or returns an invalid-token sentinel.
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 'Args:' line is a thin restatement of the schema tree's intent, but the validation rules described (one end condition per step, paired pace bounds, pace format) do add genuine semantic meaning to how the workout parameter must be structured. Given 0% description coverage at the top level, however, the description under-serves the depth that a single high-level parameter with heavy nesting demands.
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 opening line, 'Assemble a running workout and show what WOULD be created — no network call,' uses a specific verb and object while immediately distinguishing the preview from an actual create operation. It clearly differentiates itself from sibling create_running_workout via the 'WOULD be created' 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?
Explicitly instructs 'Always call this first and review the result,' giving an unambiguous directive on when to use it, and describes passing the returned confirmation_token to create_running_workout, naming the exact alternative workflow and sequencing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_strength_workoutA
Assemble a strength workout and show what WOULD be created — no network call.
Resolves each exercise name to Garmin's catalog and returns a readable
summary, the resolved Garmin name + confidence per exercise, warnings for
anything that did not map cleanly, and a confirmation_token to pass to
create_strength_workout. Always call this first and review the result.
Args: workout: the workout definition (name, blocks of sets/exercises).
| Name | Required | Description | Default |
|---|---|---|---|
| workout | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| summary | Yes | Human-readable block-by-block summary. |
| warnings | No | Exercises that did not resolve cleanly. |
| exercises | Yes | |
| confirmation_token | Yes | Pass to create_strength_workout to confirm. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full disclosure responsibility. It states 'no network call', explains it resolves names, and returns warnings and a token, giving good insight into behavior. It could explicitly state it never modifies data, but the term 'preview' and 'no network call' strongly imply safety.
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 with a clear structure: purpose first, then what it returns, then usage instruction. Every sentence adds value, and the Args section is well-organized.
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 all necessary aspects: what it does, what it returns (summary, resolved names, warnings, confirmation_token), and when to use it (before create_strength_workout). Given an output schema exists (but not shown), the description sufficiently describes the return values, making it 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%, but the description provides a high-level explanation of the workout parameter (name, blocks, sets, exercises) and how it is resolved. This adds context beyond the schema's property descriptions, helping the agent understand the parameter's role.
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 assembles a strength workout and shows what would be created without a network call, distinguishing it as a preview step. It mentions resolving exercise names and returning a summary and confirmation token, which clearly describes its purpose.
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 states 'Always call this first and review the result' and references the sibling tool create_strength_workout by mentioning passing a confirmation_token to it. This provides clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schedule_workoutA
Put an existing library workout on a Garmin Connect calendar date (a WRITE).
Works for any workout type (running, strength, ...). A scheduled workout is
pushed to the watch automatically on its next sync — no "Send to Device"
needed. Reversible with unschedule_workout.
Args: workout_id: id from create_running_workout / create_strength_workout / list of workouts in Garmin Connect. date: calendar date, YYYY-MM-DD.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ||
| workout_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | |
| workout_id | Yes | |
| schedule_id | No | |
| workout_name | No | |
| calendar_date | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It clearly signals a write operation, explains the effect (pushed to watch on next sync), and mentions reversibility. It does not disclose potential side effects like overwriting an existing schedule, but it is transparent about core 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 brief and front-loaded with the core purpose. Two sentences and a compact args list, no redundant phrases. Every sentence adds distinct value, from write nature to auto-sync and reversibility.
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 there is an output schema, the description need not explain return values. It covers purpose, parameter source, auto-sync behavior, reversibility, and is complete for a simple write operation. It could mention edge cases like date restrictions, but overall it is well-rounded.
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 description adds significant value beyond the schema: workout_id is explained as coming from create/listing functions, and date is given format YYYY-MM-DD. Both parameters are fully described with practical context, exceeding the schema's minimal type-only definitions.
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: 'Put an existing library workout on a Garmin Connect calendar date' with the explicit 'a WRITE' marker. It distinguishes from siblings like unschedule_workout and the read-oriented getters, and specifies it works for any workout type.
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 provides context on input source (workout_id from create/list functions) and states reversibility with unschedule_workout, implying when to use. However, it does not explicitly state when not to use or mention alternative scheduling mechanisms, and could be clearer about prerequisites like date validity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unschedule_workoutA
Remove a scheduled workout from the calendar (a WRITE; keeps the template).
The workout stays in your library — only the calendar entry is removed.
Args:
schedule_id: id returned by schedule_workout.
| Name | Required | Description | Default |
|---|---|---|---|
| schedule_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | |
| schedule_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It explicitly states that this is a WRITE operation, which is critical since the annotation readOnlyHint is absent. It also clarifies that the template is preserved, addressing potential side effects. This is more transparent than typical tool descriptions.
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, with two short paragraphs and an Args section. Every sentence earns its place: it states the action, clarifies the side-effect (keeps template), and explains the parameter. No filler or redundant 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?
Given the tool's simplicity (one parameter) and presence of an output schema (which likely describes the result), the description is almost complete. It covers the key behavioral aspects (write operation, template preservation) and parameter sourcing. Minor gap: it doesn't mention what happens to the schedule_id if the workout is already unscheduled or if it's invalid, but this is not critical for 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?
Schema coverage is 0%, but the description provides crucial information about the parameter: 'schedule_id: id returned by schedule_workout'. This explains the parameter's origin and format, adding value beyond the schema. The guidance is clear and actionable, though it could mention what happens if the id is invalid.
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 purpose: 'Remove a scheduled workout from the calendar', distinguishing it from siblings like 'schedule_workout' and 'delete_workout' by specifying it only removes the calendar entry, not the workout itself.
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 clear context on what the tool does (removes calendar entry) and what it does not do (keeps the template). It implies usage when a scheduled workout needs to be unscheduled, and the note 'keeps the template' helps differentiate from deleting the workout. However, it doesn't explicitly mention when to use this versus alternatives like 'delete_workout'.
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.
63 tool updates
v0.1.0- First observed
create_running_workout - First observed
create_strength_workout - First observed
delete_workout - First observed
get_activities_by_date - First observed
get_activity_details - First observed
get_activity_gear - First observed
get_activity_power_zones - First observed
get_activity_split_summaries - First observed
get_activity_timeseries - First observed
get_activity_typed_splits - First observed
get_activity_weather - First observed
get_all_day_events - First observed
get_badges - First observed
get_blood_pressure - First observed
get_body_battery - First observed
get_body_battery_events - First observed
get_body_composition - First observed
get_cycling_ftp - First observed
get_daily_briefing - First observed
get_daily_steps_range - First observed
get_daily_summary - First observed
get_devices - First observed
get_endurance_score - First observed
get_fitness_age - First observed
get_fitness_metrics - First observed
get_floors - First observed
get_gear - First observed
get_goals - First observed
get_heart_rate_timeline - First observed
get_hill_score - First observed
get_hrv_status - First observed
get_hydration - First observed
get_intensity_minutes - First observed
get_lactate_threshold - First observed
get_last_activity - First observed
get_lifestyle_log - First observed
get_menstrual_data - First observed
get_nutrition - First observed
get_personal_records - First observed
get_progress_summary - First observed
get_recent_activities - First observed
get_respiration - First observed
get_resting_heart_rate - First observed
get_running_tolerance - First observed
get_scheduled_workouts - First observed
get_sleep - First observed
get_spo2 - First observed
get_stats_and_body - First observed
get_steps_and_calories - First observed
get_steps_timeline - First observed
get_strength_sets - First observed
get_stress - First observed
get_training_load - First observed
get_training_plans - First observed
get_training_readiness - First observed
get_user_profile - First observed
get_weekly_summary - First observed
get_weigh_ins - First observed
list_workouts - First observed
preview_running_workout - First observed
preview_strength_workout - First observed
schedule_workout - First observed
unschedule_workout
TDQS
Scored across 63 tools
Many tools have fuzzy boundaries: get_daily_summary, get_daily_briefing, and get_stats_and_body all return overlapping daily snapshots, and get_recent_activities, get_activities_by_date, and get_last_activity serve nearly the same retrieval purpose. Activity-level tools like get_activity_details, get_activity_timeseries, get_activity_split_summaries, and get_activity_typed_splits also overlap enough that an agent could easily select the wrong one.
The tool names follow a very consistent verb_noun pattern: nearly all reads are get_* and writes use preview_, create_, delete_, schedule_, unschedule_, and list_. All names are snake_case with predictable prefixes, making the naming style highly uniform across the entire set.
63 tools is far beyond the 3-15 well-scoped range and well into the 50+ extreme-mismatch territory. While Garmin has a broad data surface, this many tools creates navigational overhead and many could be consolidated into parameterized or grouped endpoints.
The read surface is exhaustive, covering sleep, HRV, body battery, stress, activities, workouts, nutrition, menstrual data, and more. The write surface covers workout preview/create/list/schedule/unschedule/delete, with the main gap being no workout update or edit flow.
Maintenance
Related MCP Connectors
Garmin data in Claude: 135 tools — activities, sleep, HRV, training, workouts. Free, open source.
Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.
Connect Claude to your Intervals.icu watch data for fitness, workout review, and plan writing.
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
Related MCP Servers
- AlicenseBqualityAmaintenanceConnects Claude Desktop to Garmin Connect, enabling natural language queries of fitness activity data, health metrics, sleep analysis, workout management, and device information with 94 available tools.1101MIT
- AlicenseAqualityDmaintenanceEnables Claude Desktop to access and analyze Garmin wearable health data including sleep, HRV, Body Battery, and activity metrics. Users can query their health trends, track recovery, and generate interactive HTML dashboards using natural language.96MIT
- AlicenseAqualityBmaintenanceEnables Claude to access and query your Garmin Connect data, including sleep, activities, training load, and health metrics, through a set of read-only MCP tools.28137 PyPI1MIT
- FlicenseNot gradedqualityDmaintenanceProvides Claude with read-only access to Garmin Connect data including daily health metrics, training status, activity details, and trends through 32 tools.-