garmin-owl
garmin-owl is a local-only, read-only MCP server that exposes Garmin Connect health and training data to MCP clients through 17 tools, with no write capabilities.
Get daily health snapshots: steps, distance, calories, HR, stress, floors, and intensity minutes (
get_daily_summary).Get sleep details: score, stages, timing, respiration, and SpO2 (
get_sleep).Get HRV status, nightly/weekly averages, and optional timeseries (
get_hrv).Get Body Battery charged/drained levels and optional series (
get_body_battery).Get stress averages, max, and duration by intensity band, optionally with timeseries (
get_stress).Get training readiness and its components (
get_training_readiness).Get weight and body composition over a date range (
get_body_composition).Get normalized cycle phase/day without notes, symptoms, or raw logs (
get_cycle).List and inspect activities: recent activities, date-range queries, one activity's laps/zones/training effect, and side-by-side comparisons (
get_activities,get_recent_activities,get_activity,compare_activities).Summarize training by ISO week and get training load/status, VO2 max, endurance, and hill scores (
get_training_week,get_training_load).Get combined recovery views: one-day recovery, 7/14/28-day recovery trends, and training context with transparent comparisons (
get_recovery,get_recovery_trend,get_training_context).The server is read-only, local, reports missing metrics honestly, and excludes credentials, raw GPS coordinates, and private cycle data.
Provides read-only access to Garmin Connect health and training data, including daily summaries, sleep, HRV, body battery, stress, recovery, activities, training load, body composition, and cycle information.
Click on "Install 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-owlSummarize my recovery today."
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-owl
garmin-owl is a local-only, read-only Garmin MCP server for macOS. It gives an MCP client such as Claude Desktop concise health and training context without uploading a separate copy of your Garmin data or adding any Garmin write capability.
It uses the unofficial python-garminconnect client, so Garmin API changes may occasionally require updates.
Quick start
Requirements: macOS, Python 3.12+, uv, and a Garmin Connect account.
git clone https://github.com/xichen-de/garmin-owl.git
cd garmin-owl
uv sync
uv run garmin-owl-authYou'll be prompted in your terminal for your Garmin email, password, and MFA code if your account uses one. Only a reusable session token is saved, to ~/.garminconnect. The MCP server never asks the model for any of these.
Re-run uv run garmin-owl-auth any time to check your saved tokens — it only re-authenticates if they've expired.
Garmin has no public OAuth login for personal Garmin Connect data — the "Sign in with Garmin" redirect flow you'd get from Google or GitHub doesn't exist for individual accounts. Garmin's only OAuth API (the Connect Developer Program) is gated behind a business partnership agreement, not available to a personal script.
So garmin-owl, like every other open-source tool that reads personal Garmin data, authenticates the way the official Garmin Connect app does internally: your email and password go directly to Garmin's own login endpoint (sso.garmin.com) in exchange for session tokens, and only those tokens are stored locally.
Your credentials are typed once in your own terminal, held in memory for that one login call, and never logged, written to disk, or sent anywhere other than Garmin's servers. In particular, they never reach the MCP client or the model.
Related MCP server: Garmin Connect China MCP Server
Install in Claude Desktop
Authenticate once with
uv run garmin-owl-auth.Open Claude Desktop → Settings → Extensions.
Drag the latest
garmin-owl-*.mcpbfile fromdist/into the Extensions window.Enable the extension and restart Claude Desktop if prompted.
Then try:
"Summarize my recovery today."
"How did I sleep last night?"
"Compare my last two activities."
"Show my 28-day recovery trend."
"How does my cycle day line up with my recovery?"
The bundle contains the project source but no credentials, tokens, or health data.
Available tools
17 read-only tools. There are no write tools.
One day at a time
Tool | Answers |
| Steps, distance, calories, HR, stress, floors, intensity minutes |
| Sleep score, stages, timing, respiration, SpO2 |
| HRV status, nightly and weekly averages |
| Charged, drained, and start/end/highest/lowest levels |
| Average and max stress, plus durations by intensity band |
| Garmin's readiness score and its components |
| Weight and related measurements over a date range |
| Cycle phase, day, and Garmin predictions |
Activities and training
Tool | Answers |
| Activities in a date range (defaults to the last 14 days) |
| Activities from the last N days, optionally filtered by type |
| One activity's laps, training effect, and HR/power zones |
| Side-by-side metrics for 2–10 activities |
| Mon–Sun totals and zone time, with per-metric coverage |
| Training status, VO2 max, endurance, and hill scores |
Combined and trends
Tool | Answers |
| Sleep, HRV, Body Battery, stress, RHR, and readiness for one day |
| Those metrics plus Body Battery across 7, 14, or 28 days |
| Recovery plus the requested date's preceding training |
How results are reported
Garmin values and
garmin-owlcalculations stay distinguishable. Derived comparisons state their baseline dates, sample count, and formula.Missing metrics stay missing. Nothing is guessed, and nothing absent is summed as zero.
Totals disclose their coverage — how many activities actually reported the metric.
An
availabilitylist explains every gap, distinguishing "Garmin had no data" from "unsupported on this device" from "the read failed or was rate-limited."
get_cycle intentionally excludes notes, symptoms, moods, sexual activity, and raw daily logs.
Sync and local cache
Optional, but makes later requests faster:
uv run garmin-owl-sync # last 7 days
uv run garmin-owl-sync --days 30This loads daily summaries, sleep, HRV, training readiness, and activity summaries, fetching only what's missing or stale. Body Battery, stress, activity details, and cycle data are fetched on demand instead.
uv run garmin-owl-cache-info # inspect
uv run garmin-owl-cache-clear # clear (leaves auth tokens alone)The cache lives at ~/Library/Application Support/garmin-owl/garmin.sqlite. Set GARMIN_OWL_DB to move it.
Watches and scales upload late, so a calendar day is treated as settled only at noon the following day.
A record is trusted indefinitely once it was fetched after its day settled. A record captured while the day was still synchronizing is reused for at most 20 minutes, then re-fetched — so a partially synced day never becomes permanently authoritative. The same rule covers date ranges and cached activity details.
Troubleshooting
garmin-owl never retries automatically and never surfaces raw Garmin responses, so error messages are short.
Message contains | Meaning | Fix |
"No local Garmin tokens found" | Not authenticated yet, or | Run |
"authentication expired or was rejected" | Garmin logged the session out (e.g. after a password change) | Run |
"rate limit reached" | Too many Garmin requests too quickly | Wait a few minutes; running |
"Garmin Connect is unavailable" | A transient network or Garmin outage | Try again later |
"unexpected response shape" | Garmin changed a private endpoint's fields | Open an issue with the tool name (never paste your Garmin data) |
"no data for this request" | That metric isn't recorded for that date or device | Expected for unsupported metrics; not an error to fix |
If the extension doesn't appear after installing, confirm the .mcpb matches the one built for your checkout and restart Claude Desktop. If tools time out on first use, run uv run garmin-owl-sync once so the cache is warm.
Privacy and safety
Garmin access is read-only, over local stdio.
Tokens stay in
~/.garminconnect; normalized data stays in the local SQLite cache.Output excludes credentials, account identifiers, raw GPS coordinates, and private cycle logs.
Health summaries are informational, not medical advice.
Review your MCP client's own privacy and data-retention settings before sending health information to any model.
Development
uv sync --extra dev
uv run pytest
uv run ruff check .
uv run mypy src testsBuild the Claude Desktop extension:
./scripts/build-extension.shThis validates manifest.json and writes a versioned .mcpb to dist/. It never includes secrets or the local health database.
All three commands below are redacted by design: they report structure, key names, and exception classes only — never response values.
Check a live connection:
uv run garmin-owl-smoke --activity-id ACTIVITY_IDGarmin returns trainingStatus as an unlabeled numeric code. garmin-owl reports it as training_status_code and does not guess what a code means; training_status is populated only when Garmin also sends wording. To see whether your account's response carries a label key:
uv run python -m garmin_owl.diagnostic --training-status 2026-08-31To check whether a metric is reachable at all through reads garmin-owl is already permitted to make, scan those responses for matching key names. This goes through the same allow-list the server uses, so it cannot look anywhere the server itself cannot:
uv run python -m garmin_owl.diagnostic --find-keys 2026-08-31 tempFor example, skin temperature is not supported: python-garminconnect exposes no skin temperature read as of 0.3.12. If a scan shows a temperature key inside a response garmin-owl already fetches, it can be normalized from that existing read without widening the allow-list.
Limitations and removal
Garmin Connect is a private API, and metric availability varies by device and account. If Garmin changes an endpoint, authentication or individual reads may temporarily fail.
To remove garmin-owl, uninstall the extension in Claude Desktop and delete the repository, and optionally the SQLite cache. Remove ~/.garminconnect only if you also want to discard Garmin tokens used by other tools.
Available Tools
17 toolscompare_activitiesB
Compare 2-10 activity details and transparent metric ranges.
| Name | Required | Description | Default |
|---|---|---|---|
| activity_ids | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 hints at a read-only comparison and 'transparent metric ranges' but does not state side effects, authentication, failure behavior, or how ranges are computed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence with no filler, and 'Compare' plus the 2-10 constraint are front-loaded. The trailing 'transparent metric ranges' is ambiguous but does not waste 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?
For a one-parameter comparison tool with an output schema, the definition conveys the core call pattern. The main gap is the vague 'transparent metric ranges' and absence of explicit guidance on when to prefer this over get_activities or get_activity, though the output schema likely covers return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the only parameter is activity_ids; the description adds the key constraint that 2-10 IDs are expected. It does not clarify duplicate handling, ordering, or whether IDs must reference existing activities, but for a single obvious 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 uses a specific verb ('Compare') and resource ('activity details'), and its scope ('2-10') distinguishes it from single-item getters like get_activity. The phrase 'transparent metric ranges' is imprecise but does not obscure the core 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 '2-10' range implies this tool is for multi-activity comparison, while siblings like get_activity or get_activities are likely for single or list retrieval. However, there is no explicit when/when-not guidance or mention of alternatives, leaving selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_activitiesB
List up to 100 concise activities, optionally within an inclusive date range.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| end_date | No | ||
| start_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 reveals a 100-item cap, concise output, and inclusive date filtering, but does not disclose ordering, pagination, error behavior, or date format requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the action and key constraints. Every clause adds 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?
The presence of an output schema covers return values, and the tool has only three optional parameters. However, the description leaves ambiguity around date format and ordering, and it does not distinguish this tool from get_recent_activities, which is a closely related sibling.
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 maps 'up to 100' to limit and 'inclusive date range' to start_date/end_date, but it fails to specify the expected date format or the default behavior more clearly than the schema already does.
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?
States a clear action (list) and resource (activities), with useful scope details: up to 100, concise, and optional inclusive date range. It is distinguishable from singular get_activity and compare_activities, though it does not explicitly contrast with get_recent_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?
No when-to-use or alternative guidance is provided. The optional date range implies a use case, but the description does not say when to prefer this tool over get_recent_activities or other sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_activityB
Get one activity summary, laps, training effect, and available HR/power zones.
| Name | Required | Description | Default |
|---|---|---|---|
| activity_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It clearly implies a read-only operation and notes that HR/power zones are 'available' rather than guaranteed, but it does not mention behaviors like how missing activity IDs are handled, auth requirements, or response edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence with no filler or redundant qualifiers. It front-loads the core action and then enumerates the specific returned data, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter getter with an output schema present, the description provides the key information needed to invoke it: the singular scope and the kinds of data returned. It omits usage guidance and edge-case behavior, but those are partially inferable from sibling names and the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage and only defines activity_id as a required integer. The description does not explicitly explain the parameter, but the property name and title 'Activity Id' are self-explanatory for a one-parameter getter, so the gap is minor.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Get one activity') and lists concrete output categories (summary, laps, training effect, HR/power zones). The word 'one' distinguishes it from plural siblings like get_activities and get_recent_activities, though it does not explicitly contrast with compare_activities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance about when to use this tool versus sibling tools. The singular 'one activity' implies it is for a single activity's detail, but the description does not state to prefer it over get_activities or compare_activities, leaving the selection decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_body_batteryA
Get daily Garmin Body Battery; optional series is capped at 48 points.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | ||
| include_timeseries | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses a useful non-obvious limit: the optional series is capped at 48 points. As a read-oriented 'get' tool, the behavior is largely clear, though edge cases like date handling or unavailable data are not mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler. It front-loads the core purpose and then adds only the important series limitation. Every word contributes.
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 read tool with an output schema, the description covers the essential selection and invocation details. It explains the tool's purpose and the key series cap, though it could have briefly addressed the date parameter's expected format.
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 loosely maps 'daily' to the date parameter and 'optional series' to include_timeseries, and adds the 48-point series cap. However, it does not specify date formats, the meaning of the series points, or better describe the boolean's behavior.
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 Body Battery'), the verb ('Get'), and the daily scope. It also distinguishes an optional series mode, which helps separate this tool from sibling metrics like get_hrv or get_sleep.
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 usage context: it returns a daily Body Battery value, with an optional series. It does not mention when not to use it or point to alternatives, so it stops short of full usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_body_compositionA
Get weight and Garmin-provided body composition for at most 366 days.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | ||
| start_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the behavioral burden. It adds transparency about the maximum date range and data source, but it does not disclose default behavior when dates are omitted, date format expectations, or how the endpoint handles over-range requests.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the verb, resource, and key constraint all appear before any secondary details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema and only two optional simple parameters, the missing pieces are small, but the lack of default-date behavior and usage routing leaves an agent to infer how to call it without arguments.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds the meaningful constraint that start/end dates span at most 366 days, but it does not document date syntax or what null defaults mean for each parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get'), resource ('weight and Garmin-provided body composition'), and a concrete boundary (at most 366 days). This clearly differentiates it from sibling health-data tools by naming the body-composition resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The resource name implies use when body composition or weight data is needed, and the 366-day cap is a useful constraint. However, it does not explicitly state when to prefer this tool over siblings or give exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cycleB
Get normalized cycle phase/timing without notes, symptoms, or raw day logs.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It adds useful context by noting the output is normalized and excludes notes, symptoms, and raw day logs, but it does not explain what 'normalized' means, how date selection affects results, or any data-availability caveats.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word contributes to the core semantics of what is returned and what is excluded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one optional parameter and an existing output schema, so return-value documentation is not required. However, the missing date semantics and lack of usage guidance leave some ambiguity about how to invoke it correctly, especially when a specific date is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single optional 'date' parameter has 0% schema description coverage and the description does not mention date at all. The agent is given no guidance about accepted formats, default behavior, or what null means, so the description fails to compensate for the missing schema detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the verb 'Get' with a specific resource, 'normalized cycle phase/timing', and explicitly states what is omitted ('without notes, symptoms, or raw day logs'). This identifies the tool's function clearly, though it does not directly differentiate from the listed siblings since none target cycle data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit statement of when to use this tool versus alternatives. The exclusions imply a summary use case, but no sibling or alternative tool is named and no contextual conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_daily_summaryB
Get concise daily steps, distance, calories, HR, stress, floors, and intensity.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It signals a read-only 'Get' operation and a concise aggregated response, but does not explain date fallback behavior, timezone handling, missing-data behavior, or any other operational 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?
One tightly packed sentence front-loads the verb, resource, and metric list. Every word contributes meaning, and no redundant or vague 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?
For a single-optional-parameter tool with an output schema, this is close to adequate. The main gaps are the unmentioned date semantics and lack of sibling differentiation, which matter more because there are many similar getter tools and no annotations to fill in context.
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 only one 'date' parameter with 0% schema description coverage, and the description never mentions it. The word 'daily' weakly implies that the parameter selects a calendar day, but the description does not clarify format, default behavior, or null 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 names a specific action ('Get') and resource ('daily summary') and lists the exact metrics returned (steps, distance, calories, HR, stress, floors, intensity). It is clear what the tool produces, though it does not explicitly differentiate itself from focused sibling tools like get_stress or get_sleep.
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 use case is implied: request this when a concise cross-metric daily overview is needed. However, there is no explicit guidance about when to prefer this over get_activity, get_stress, or other sibling tools, and no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hrvA
Get Garmin HRV status and nightly values; optional readings are capped at 48 points.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | ||
| include_timeseries | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It adds a useful, non-obvious limitation: optional readings are capped at 48 points. The read-only nature is implied by 'Get', though not explicitly stated, so there is still some room for more transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence with no filler. The main purpose is front-loaded, and the limiting behavior is appended clearly. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a simple getter, especially since an output schema exists to document return fields. However, it fails to explain the semantics of the date parameter and offers no usage guidance relative to siblings, leaving moderate gaps for an agent to resolve.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the two parameters. It indirectly references timeseries readings, which maps to include_timeseries, but it never explains the date parameter, its default behavior, or what the returned values represent. This is insufficient for full parameter clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: retrieving Garmin HRV status and nightly values. This is immediately distinguishable from sibling tools focused on sleep, stress, recovery, or body composition, so an agent can tell what domain this tool belongs to.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to choose this tool over siblings, nor whether it should be used for current status versus historical HRV data. The 'optional readings' note hints at timeseries usage, but the description never states when to use it or what the date parameter should represent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_activitiesA
List recent cached activities with bounded days/limit and optional exact type filter.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| limit | No | ||
| activity_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden, and it does add some behavioral detail: 'cached' signals possibly stale data, and 'bounded' signals output limits. However, it doesn't address side effects, freshness behavior, ordering, or error handling beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense, front-loaded sentence that gets the core resource and operation first, then appends the relevant constraints. No filler or repetition of schema defaults/enums.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The simple operation, output schema, and defaults make the definition mostly usable, but the lack of usage guidance and any note about what 'cached' implies for data freshness leaves an agent with some ambiguity relative to the 14 sibling tools. Adequate for basic invocation, not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must add meaning to bare parameter names. It does: days and limit are called out as bounded, and activity_type is described as an optional exact filter. This meaningfully compensates for the lack of parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('List') on a specific resource ('recent cached activities') and captures the key parameter semantics ('bounded days/limit' and 'optional exact type filter'). This is specific enough to distinguish it from siblings like get_activity (single record) and get_activities (broader list).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a simple use case but never says when to prefer this tool over alternatives such as get_activities or get_activity, nor does it state exclusions or prerequisites. An agent must infer the intended context from the name and 'cached' qualifier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recoveryC
Combine Garmin-provided sleep, HRV, Body Battery, stress, RHR, and readiness fields.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden of behavioral disclosure. It states that Garmin-provided fields are combined, but says nothing about read-only-ness, date handling, default behavior, aggregation logic, or what happens when data is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no filler, front-loaded verb, and clear enumeration of fields. It is efficient and easy to parse, though terse to the point of under-specification in other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists, so return shape is at least represented, and the parameter surface is minimal. However, the description lacks usage guidance, date semantics, and any differentiation from overlapping siblings, leaving the agent with insufficient context to confidently select and invoke the 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% and the description never mentions the 'date' parameter. An agent cannot infer format, meaning, or default behavior beyond the schema's default null, so the description adds no semantic value for the only 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 uses a specific verb ('Combine') and names the resource components (sleep, HRV, Body Battery, stress, RHR, readiness), making clear this is an aggregate recovery snapshot rather than a single-metric getter. It distinguishes itself from component siblings like get_sleep or get_hrv, though it does not explicitly differentiate from get_recovery_trend.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus get_recovery_trend, get_daily_summary, or the individual component tools. The optional date parameter and its behavioral implications are also not addressed, so an agent is left to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recovery_trendA
Get 7, 14, or 28 days of recovery facts, averages, and missing-date metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It discloses that the tool aggregates recovery facts and includes missing-date metadata, which is useful, but it does not mention side effects, permission requirements, timezone handling, or behavior for invalid day values; the read-only nature is only implied by the 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?
A single sentence delivers the tool's purpose and key constraint with no filler. All words add information; the day ranges and output content are 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 one-parameter retrieval tool with an output schema, this description covers the main call contract: it names the resource, the allowed day values, and the output categories. What's missing is mostly edge-case behavior (invalid day values, timezone) and explicit sibling differentiation, which are secondary for a read-only trend 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 only defines 'days' with no description (0% coverage), but the description adds significant meaning by constraining accepted values to 7, 14, or 28 and framing days as the trend window. It does not explain the default or invalid input behavior, but it exceeds the schema's information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource ('recovery trend') and a precise temporal window (7, 14, or 28 days) with clear output content (facts, averages, missing-date metadata). This distinguishes it from sibling get_recovery without needing to 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?
No explicit when-to-use guidance or alternative routing is provided. The intended use is implied by 'recovery trend' and the day ranges, but an agent is not told when to prefer this over get_recovery or other wellness tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sleepB
Get Garmin-recorded sleep score, stages, timing, respiration, and SpO2 when available.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden of behavioral disclosure. It adds the 'when available' qualifier for SpO2 and names the source as Garmin, but does not mention permissions, failure behavior, or how the optional date affects results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word adds value, and the metric list is packed into a compact, readable format.
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 a low-optionality schema and an output schema present, the tool doesn't need extensive documentation, but the total absence of parameter semantics and any usage caveats leaves minor gaps. The core purpose is clear, yet an agent is not told how to specify 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 coverage is 0% and the sole parameter `date` has no description. The tool description does not explain the expected date format, meaning, or default behavior, so an agent gets no semantic guidance beyond the parameter's name.
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 the specific verb 'Get' and enumerates the exact sleep metrics included (score, stages, timing, respiration, SpO2), making it clearly distinct from sibling tools like get_hrv or get_stress. The qualifier 'when available' also sets accurate expectations for data availability.
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 tool is for retrieving sleep data but does not explicitly state when to prefer it over alternatives or any exclusion conditions. It relies on the tool name and metric list to signal usage, so guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stressB
Get Garmin daily stress durations; optional series is capped at 48 points.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | ||
| include_timeseries | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose one meaningful behavioral trait: the optional timeseries is capped at 48 points. The verb 'Get' also implies a read-only operation, but other behaviors like default date handling, timezone effects, or pagination are not addressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tight sentence that front-loads the core purpose and appends a relevant constraint. Every word earns its place; 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?
For a tool with two optional parameters and an output schema, the description is minimally adequate: it states the core result and one notable limitation. Yet it leaves parameter semantics, date format, and the mapping of 'optional series' to `include_timeseries` unexplained, and there are no annotations to fill those gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It vaguely alludes to the timeseries parameter via 'optional series' and adds the 48-point cap, but it never names or explains `date` or `include_timeseries`. The meaning of 'daily' weakly hints at the date parameter but is not 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?
Names a specific verb and resource ('Get Garmin daily stress durations') and is clearly distinct from sibling metrics like sleep, HRV, or body composition. However, it does not clarify exactly what 'daily stress durations' returns or how it differs from the related get_daily_summary tool.
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 on when to choose this tool over its siblings. The stress-specific wording implies its use case, but it does not state exclusions or compare against alternatives like get_daily_summary or get_recovery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_training_contextB
Get cache-backed recovery, recent training, and transparent 7-day comparisons.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. 'Cache-backed' usefully signals that data may not be live, and 'transparent 7-day comparisons' suggests a defined comparison window, but it does not clarify freshness, staleness limits, or what 'transparent' guarantees.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. 'Transparent' adds little rigor, but overall it is compact and readable.
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 the core resource, temporal window, and cache behavior, and an output schema exists, so return format is not a gap. However, it leaves the date parameter's role and the distinction from many sibling get_* tools unexplained, making it only minimally 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 no descriptions for the optional 'date' parameter (0% coverage), and the description never mentions 'date' or explains how it anchors the 7-day window. The '7-day comparisons' phrasing provides only weak indirect context.
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 an explicit verb and identifies the resource: recovery, recent training, and 7-day comparisons. It is clear enough to distinguish from individual calls like get_recovery or get_recent_activities, though it does not name a sibling or define 'context' precisely.
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 'cache-backed' and '7-day comparisons' implies when the tool is appropriate, especially compared to live or single-day tools. However, there is no explicit when-to-use/when-not-to-use guidance or alternative routing 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_training_loadC
Get Garmin training status/load, VO2 max, endurance, and hill fields when available.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry behavioral disclosure, but it only notes that fields are returned 'when available'. It does not explain what happens when data is unavailable, whether this depends on prior recorded activities, or how the date argument affects results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence that front-loads the key returned fields. No filler or redundant phrasing 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 relatively simple and has an output schema to document return values, but the missing date-parameter semantics and lack of sibling differentiation leave an agent uncertain about correct invocation and 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 description coverage is 0%, so the description must compensate, but it never mentions the 'date' parameter. The schema provides only a name and default null, leaving the date's format, allowed range, and effect on returned metrics unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly names the resource (training status/load, VO2 max, endurance, hill fields) and the verb (Get). It distinguishes itself from sibling metrics tools by listing specific fields, though it does not explicitly contrast with get_training_context or get_training_readiness.
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 use this tool versus siblings like get_training_context, get_recovery, or get_daily_summary. The phrase 'when available' hints at conditional data availability but does not provide any usage direction or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_training_readinessC
Get Garmin training readiness and its available components.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'Get' and mentions components; it does not disclose whether this is a read-only operation, what 'components' means, whether it depends on other data like sleep, how dates are handled, or what the response contains. The description adds little 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 a single concise sentence that front-loads the core operation and resource. It is efficient and easy to parse, though the phrase 'and its available components' is slightly vague and could be more informative without adding 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 one-optional-parameter getter, the description is minimally adequate: the tool name and description together convey what is being retrieved, and the output schema presumably documents return shape. However, it lacks any guidance on date semantics, required prior data, or how this metric relates to sibling tools, leaving noticeable gaps for an agent deciding how to invoke 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?
Schema description coverage is 0%, so the description should compensate, but it says nothing about the optional 'date' parameter: its format, meaning, default behavior, or how omitting it affects results. The parameter name and nullable default in the schema provide minimal clues, but the description adds no semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and a specific resource ('Garmin training readiness'), and further notes it returns 'available components.' This makes the tool's purpose reasonably clear and distinguishable from siblings such as get_training_load or get_training_context, though it does not explicitly name any alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 versus siblings like get_training_context, get_recovery, or get_hrv. The description relies entirely on the resource name to imply usage, and there is no mention of prerequisites, expected input, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_training_weekB
Summarize the ISO Monday-to-Sunday week containing date.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It adds one useful behavior—the ISO Monday-to-Sunday week boundary rule—but omits important context such as what happens when date is null (the default), what data is summarized, and whether this is a read-only 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?
A single, efficient sentence that front-loads the action and the key scoping rule. Every word earns its place, with 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?
The tool is simple—one optional parameter and an output schema—so the description is nearly sufficient. The missing null-default behavior and date format ambiguity are material enough to prevent full completeness, but the core invocation context is clear.
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 adds meaning by indicating that date anchors the week being summarized, but it does not explain the expected date format or the behavior when null is passed, even though null is the schema default. This leaves a meaningful gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('Summarize') on a clearly defined resource: the ISO Monday-to-Sunday week containing the given date. This distinguishes it from sibling tools that target daily summaries, individual activities, or specific metrics. 'Summarize' remains somewhat generic about what the summary contains, so it is 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 implies it should be used when a weekly training summary for a date's week is needed, especially by clarifying ISO week boundaries. However, it provides no explicit exclusions, alternatives, or guidance on when another sibling 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.
TDQS
Several tools have heavily overlapping scopes: get_recovery, get_recovery_trend, get_training_context, and get_training_readiness all address recovery/readiness with unclear boundaries, and get_activities vs get_recent_activities vs get_activity add further ambiguity. Descriptions contain qualifiers like cache-backed and optional series, but an agent would still struggle to reliably pick the right tool.
All tools follow an action_noun snake_case pattern, almost uniformly get_<metric> with compare_activities as the only non-get action. The naming is predictable and easy to scan.
17 tools sits at the high end and many could be consolidated, with recovery-related getters alone accounting for four tools. It is not egregiously large, but the set feels heavier than necessary for a read-only Garmin data API.
For a read-only health/fitness retrieval server, the surface covers the major Garmin domains: activities, sleep, HRV, stress, body battery, recovery, training load, daily summary, and cycle. Minor gaps like explicit user-profile or goal endpoints are absent, but core retrieval workflows are well represented.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.
Private Apple Health metrics and workout detail for ChatGPT, Claude, and any MCP client.
Your WHOOP data in the assistant, read-only: recovery, sleep, strain, workouts, cycles and body meas
Connect your wearables, rings and training apps, then ask your AI about your own health data.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to read Garmin health and fitness data from the Chinese version (garmin.cn) via MCP protocol.3MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to query live Garmin Connect health and fitness data, including daily metrics, activities, sleep analysis, and trends via natural language.MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to access Garmin Connect fitness and health data, including activities, heart rate, sleep, and device information.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/xichen-de/garmin-owl'
If you have feedback or need assistance with the MCP directory API, please join our Discord server