Skip to main content
Glama

Garmin Coach MCP

A Model Context Protocol (MCP) server that lets an AI assistant read your Garmin Connect data and write structured training back into it. It covers sleep, health metrics, activities and training volume on the read side, and multi-sport structured workouts, calendar scheduling and performance metrics on the write side.

Built to close a specific gap: most Garmin integrations only read. This one plans a training block and puts it on the watch.

Table of Contents

Related MCP server: Garmin Workouts MCP Server

Overview

This MCP server connects your AI assistant (Claude Desktop, Claude Code, or any MCP-compatible client) directly to your Garmin Connect account, enabling:

  • Real-time Health Insights: Access sleep, heart rate, steps, stress, and body battery data

  • Training Analytics: Aggregate training volume by week, month, or custom date ranges

  • Activity Analysis: Retrieve detailed activity data with filtering and pagination

  • Multi-metric Summaries: Get comprehensive daily health overviews

Tech Stack: TypeScript, Node.js 20+, MCP SDK, garmin-connect library

Features

šŸŒ™ Sleep Analytics

  • Detailed sleep stages (deep, light, REM, awake)

  • Sleep scores and quality metrics

  • Duration and timing analysis

  • Summary and detailed modes

šŸ’Ŗ Health Metrics

  • Steps: Daily step counts, goals, and progress tracking

  • Heart Rate: Resting HR, max HR, zones, and time-series data

  • Body Composition: Weight tracking and body composition

  • Stress & Recovery: Stress levels and body battery metrics

šŸƒ Activity Tracking

  • Recent activity lists with filtering

  • Detailed activity information (splits, laps, metrics)

  • Activity-specific data (distance, duration, pace, elevation)

  • Pagination support for large datasets

šŸ“Š Training Volume Analysis

  • Weekly training aggregation (ISO week standards)

  • Monthly training summaries

  • Custom date range analysis (up to 365 days)

  • Activity type filtering (running, cycling, swimming, etc.)

  • Trend analysis (week-over-week, month-over-month)

  • Sport-specific breakdowns

Setup

Prerequisites

  1. Garmin Connect Account: Active account with data from a compatible Garmin device

  2. Node.js: Version 20 or higher

  3. MCP Client: Claude Desktop, Claude Code, or another MCP-compatible application

Installation

No installation required! Configure directly in your MCP client:

Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json on macOS or %APPDATA%\Claude\claude_desktop_config.json on Windows):

{
  "mcpServers": {
    "garmin-connect": {
      "command": "npx",
      "args": ["-y", "garmin-connect-mcp@latest"],
      "env": {
        "GARMIN_USERNAME": "your_username",
        "GARMIN_PASSWORD": "your_password"
      }
    }
  }
}

Claude Code:

Using the Claude Code CLI (recommended):

claude mcp add garmin-connect npx garmin-connect-mcp@latest \
  --env GARMIN_USERNAME=your_username \
  --env GARMIN_PASSWORD=your_password

Or manually configure (.claude/mcp.json in your project):

{
  "mcpServers": {
    "garmin-connect": {
      "command": "npx",
      "args": ["-y", "garmin-connect-mcp@latest"],
      "env": {
        "GARMIN_USERNAME": "your_username",
        "GARMIN_PASSWORD": "your_password"
      }
    }
  }
}

The -y flag automatically accepts the npx prompt, ensuring smooth startup.

Option 2: Global Installation

Install globally via npm:

npm install -g garmin-connect-mcp@latest

Then configure without npx:

{
  "mcpServers": {
    "garmin-connect": {
      "command": "garmin-connect-mcp",
      "env": {
        "GARMIN_USERNAME": "your_username",
        "GARMIN_PASSWORD": "your_password"
      }
    }
  }
}

Option 3: Local Development

For development or testing local changes:

git clone <repository-url>
cd garmin-connect-mcp
pnpm install
pnpm build

Configure with absolute path:

{
  "mcpServers": {
    "garmin-connect": {
      "command": "node",
      "args": ["/absolute/path/to/garmin-connect-mcp/dist/index.js"],
      "env": {
        "GARMIN_USERNAME": "your_username",
        "GARMIN_PASSWORD": "your_password"
      }
    }
  }
}

Or use a .env file:

{
  "mcpServers": {
    "garmin-connect": {
      "command": "node",
      "args": ["/absolute/path/to/garmin-connect-mcp/dist/index.js"],
      "envFile": "/absolute/path/to/garmin-connect-mcp/.env"
    }
  }
}

Available Tools

Overview Tools

get_daily_overview

Get a comprehensive daily summary including sleep, activities, and health metrics in one call.

Parameters:

  • date (optional): Date in YYYY-MM-DD format (defaults to today)

Example:

Show me my daily overview for yesterday

Response includes:

  • Sleep summary (duration, quality, stages)

  • Activity summary (count, total duration, distance)

  • Health metrics (steps, heart rate, stress, body battery)


Sleep Tools

get_sleep_data

Get detailed sleep information including sleep stages, movements, and quality metrics.

Parameters:

  • date (optional): Date in YYYY-MM-DD format (defaults to today)

  • summary (optional): Return only summary data (default: false)

  • fields (optional): Specific fields to include (e.g., ['dailySleepDTO', 'wellnessEpochSummaryDTO'])

Example:

Get my detailed sleep data for 2025-01-15
Show me a sleep summary for last night

Response includes:

  • Total sleep duration

  • Sleep stages (deep, light, REM, awake) with durations

  • Sleep scores and quality ratings

  • Start/end times

  • Movement data (when summary: false)

get_sleep_duration

Quick access to total sleep duration for a specific date.

Parameters:

  • date (optional): Date in YYYY-MM-DD format (defaults to today)

Example:

How many hours did I sleep last night?

Health Metrics Tools

get_health_metrics

Get aggregated health metrics for a specific date.

Parameters:

  • date (optional): Date in YYYY-MM-DD format (defaults to today)

  • metrics (optional): Array of specific metrics ['steps', 'weight', 'heart_rate', 'stress', 'body_battery'] (defaults to all)

Example:

What are my health metrics for today?
Show me just my steps and heart rate for yesterday

Response includes:

  • Steps data (count, goal, distance)

  • Heart rate (resting, max, zones)

  • Stress levels

  • Body battery percentage

  • Weight and body composition

get_steps_data

Get detailed step count and activity data.

Parameters:

  • date (optional): Date in YYYY-MM-DD format (defaults to today)

  • summary (optional): Return only summary data (default: false)

Example:

Show me my step data for today
How many steps did I take yesterday?

Response includes:

  • Total steps

  • Daily goal and progress percentage

  • Distance covered

  • Active time

  • Hourly breakdown (when summary: false)

get_heart_rate_data

Get detailed heart rate measurements and zone data.

Parameters:

  • date (optional): Date in YYYY-MM-DD format (defaults to today)

  • summary (optional): Return only summary data (default: false)

Example:

What was my heart rate today?
Show me my heart rate zones for yesterday

Response includes:

  • Resting heart rate

  • Maximum heart rate

  • Average heart rate

  • Heart rate zones and time in each zone

  • Time-series measurements (when summary: false)

get_weight_data

Get weight and body composition data.

Parameters:

  • date (optional): Date in YYYY-MM-DD format (defaults to today)

Example:

What's my current weight?
Show me my weight for last week

Response includes:

  • Weight (kg/lbs)

  • BMI

  • Body fat percentage

  • Muscle mass

  • Body water percentage


Activity Tools

get_activities

Get a list of recent activities with optional filtering and pagination.

Parameters:

  • start (optional): Starting index for pagination (default: 0)

  • limit (optional): Number of activities to return, max 50 (default: 20)

  • summary (optional): Return compact summary format (default: false)

Example:

List my last 10 activities
Show me my recent runs
Get activities 20-40 (for pagination)

Response includes:

  • Activity ID and name

  • Activity type (running, cycling, swimming, etc.)

  • Start time and duration

  • Distance, pace, speed

  • Calories and elevation gain

  • Heart rate data

  • Splits and laps (when summary: false)

get_activity_details

Get comprehensive information for a specific activity.

Parameters:

  • activityId (required): The unique ID of the activity

Example:

Show me details for activity 12345678
Give me the full breakdown of my last run

Response includes:

  • Complete activity metadata

  • Detailed splits and laps

  • Heart rate zones

  • Cadence, power, and other sensor data

  • GPS/route information

  • Weather conditions


Training Volume Tools

get_weekly_volume

Get aggregated training volume for a specific ISO week.

Parameters:

  • year (optional): Year (defaults to current year)

  • week (optional): ISO week number 1-53 (defaults to current week)

  • includeActivityBreakdown (optional): Include per-sport breakdown (default: true)

  • includeTrends (optional): Compare with previous week (default: false)

  • maxActivities (optional): Max activities to process, up to 2000 (default: 1000)

  • activityTypes (optional): Filter by activity types (e.g., ['running', 'cycling'])

Example:

What was my training volume this week?
Show me week 42 of 2024 with trends
Compare my running volume this week vs last week

Response includes:

  • Week number and date range

  • Total metrics (duration, distance, calories, elevation)

  • Activity count

  • Breakdown by activity type

  • Week-over-week trends (when includeTrends: true)

get_monthly_volume

Get aggregated training volume for a specific month.

Parameters:

  • year (optional): Year (defaults to current year)

  • month (optional): Month number 1-12 (defaults to current month)

  • includeActivityBreakdown (optional): Include per-sport breakdown (default: true)

  • includeTrends (optional): Compare with previous month (default: false)

  • maxActivities (optional): Max activities to process, up to 2000 (default: 1000)

  • activityTypes (optional): Filter by activity types

Example:

What was my training volume in January?
Show me this month's cycling volume
Compare my training this month vs last month

Response includes:

  • Month name and date range

  • Total metrics (duration, distance, calories, elevation)

  • Activity count

  • Breakdown by activity type

  • Month-over-month trends

get_custom_range_volume

Get training volume for any custom date range (up to 365 days).

Parameters:

  • dateRange (required): Date range as YYYY-MM-DD/YYYY-MM-DD

  • includeActivityBreakdown (optional): Include per-sport breakdown (default: true)

  • includeDailyBreakdown (optional): Include day-by-day breakdown (default: false)

  • maxActivities (optional): Max activities to process, up to 2000 (default: 1000)

  • activityTypes (optional): Filter by activity types

Example:

What was my training volume from 2025-01-01 to 2025-01-31?
Show me my running volume for the last 90 days
Give me a daily breakdown for the past 2 weeks

Response includes:

  • Date range and period length

  • Total metrics across the range

  • Activity count

  • Breakdown by activity type

  • Daily breakdown (when includeDailyBreakdown: true)

Performance Tools

Endpoints the underlying library does not type, reached through a raw GET helper. All are read-only.

get_vo2max

VO2max series at one-decimal precision, plus first, last, min, max and the change over the range.

Parameters: startDate, endDate (both optional, default: last 90 days)

Garmin's interface rounds VO2max to a whole number, which can sit unchanged for months while the underlying value moves. Read vo2MaxPreciseValue before concluding that fitness has plateaued.

get_activity_laps

Per-lap splits for one activity, with pace, HR and cadence per lap.

Parameters: activityId (required)

get_activity_details aggregates by step type, which collapses the individual reps of an interval session. This is what makes rep-by-rep analysis possible — whether a session held pace or faded. Laps under 300 m report no pace, since over that distance the figure is noise.

get_hr_zones

The heart rate zones configured on the account, per sport, and the basis they are calculated from.

Parameters: none

The basis matters more than the percentages. An identical 60-70% band maps to very different bpm under max HR, heart rate reserve and lactate threshold, so a run can be reported as too hard purely because the basis is wrong.

Garmin returns one entry per sport, each with its own threshold, and includes the detected lactate threshold HR even when the zones are not based on it — so this is also where to read the threshold itself. The untouched payload is returned alongside the summary, since the field set is not contractual.

get_activity_hr_zones

Time spent in each heart rate zone during one activity, with each zone's share of the session.

Parameters: activityId (required)

Average HR hides distribution: an evenly aerobic run and one that alternated too hard and too soft can average the same number.

get_race_predictions

Predicted 5K, 10K, half marathon and marathon times, formatted and in seconds.

Parameters: none

Note that this reflects race history as well as current fitness, so it can lag a real change in either direction.

get_training_readiness

The readiness score for a date, derived from sleep, recovery time, HRV and recent load.

Parameters: date (optional, defaults to today)

get_hrv

Overnight heart rate variability: last night's average, weekly average, baseline range and status.

Parameters: date (optional, defaults to today)

get_training_status

Aggregated training status for a date, including the most recent VO2max reading and acute/chronic load balance.

Parameters: date (optional, defaults to today)

Usage Examples

Quick Health Check

What's my daily overview for today?

Sleep Analysis

Show me my sleep quality for the past week
Compare my deep sleep from Monday vs Tuesday

Training Insights

How much did I run this month?
Compare my weekly volume: this week vs last week
What's my total training time for Q1 2025?

Activity Exploration

List my last 20 activities
Show me all my runs from January with heart rate data
What was my fastest 5K in the past 6 months?

Advanced Queries

Get my weekly running volume with trends for week 15 of 2025
Show me daily breakdown of cycling for 2025-03-01/2025-03-31
What are my health metrics (just steps and heart rate) for yesterday?

Advanced Features

Pagination

For large activity lists, use pagination:

// Get activities 0-49
get_activities({ start: 0, limit: 50 })

// Get activities 50-99
get_activities({ start: 50, limit: 50 })

Activity Type Filtering

Filter training volume by specific sports:

get_weekly_volume({
  activityTypes: ['running', 'cycling'],
  includeTrends: true
})

Trend Analysis

Compare periods to track progress:

// Week-over-week comparison
get_weekly_volume({ includeTrends: true })

// Month-over-month comparison
get_monthly_volume({ includeTrends: true })

Summary vs Detailed Modes

Control response size and detail level:

// Quick summary
get_sleep_data({ summary: true })

// Full detailed breakdown with time-series
get_sleep_data({ summary: false })

Response Size Management

The server automatically validates response sizes and provides fallback summaries if data exceeds limits. For large date ranges, consider:

  • Using summary: true mode

  • Filtering by specific activity types

  • Reducing date ranges

  • Disabling detailed breakdowns

Development

Commands

# Development
pnpm install          # Install dependencies
pnpm build            # Build for production
pnpm dev              # Watch mode with auto-rebuild

# Quality Checks
pnpm typecheck        # Run TypeScript type checking
pnpm lint             # Lint code
pnpm lint:fix         # Auto-fix linting issues

# Testing
pnpm test             # Run tests in watch mode
pnpm test:run         # Run tests once
pnpm test:coverage    # Generate coverage report

Project Structure

garmin-connect-mcp/
ā”œā”€ā”€ src/
│   ā”œā”€ā”€ client/           # Garmin Connect API client
│   ā”œā”€ā”€ tools/            # MCP tool implementations
│   │   ā”œā”€ā”€ overview-tools.ts
│   │   ā”œā”€ā”€ sleep-tools.ts
│   │   ā”œā”€ā”€ health-tools.ts
│   │   ā”œā”€ā”€ activity-tools.ts
│   │   └── activity-volume-tools.ts
│   ā”œā”€ā”€ types/            # TypeScript type definitions
│   ā”œā”€ā”€ utils/            # Helper functions
│   └── index.ts          # Main server entry point
ā”œā”€ā”€ dist/                 # Built output
└── __tests__/            # Test files

Running Tests

# Run all tests
pnpm test:run

# Run with coverage
pnpm test:coverage

# Watch mode for development
pnpm test

Security

Credential Management

Best Practices:

  • āœ… Use environment variables for credentials

  • āœ… Use .env files (ensure .env is in .gitignore)

  • āœ… Use MCP configuration env or envFile options

  • āŒ Never hardcode credentials in configuration files

  • āŒ Never commit credentials to version control

Environment Variables

Create a .env file in the project root:

GARMIN_USERNAME=your_username
GARMIN_PASSWORD=your_password

Testing Locally

For local development, use .mcp.json (gitignored):

{
  "mcpServers": {
    "garmin-connect": {
      "command": "node",
      "args": ["./dist/index.js"],
      "envFile": ".env"
    }
  }
}

API Rate Limits

The server includes automatic rate limiting and error handling for Garmin Connect API:

  • Small delays between batch requests (100ms)

  • Graceful error handling for failed requests

  • Maximum activity limits to prevent overwhelming the API

Troubleshooting

Common Issues

Authentication Failed

  • Verify credentials in .env file

  • Check that MCP configuration points to correct .env or has correct env values

  • Ensure Garmin account is active and accessible

No Data Returned

  • Verify your Garmin device has synced recently

  • Check that you're querying dates with actual data

  • Ensure your Garmin account has the requested data types

Response Too Large

  • Use summary: true for condensed results

  • Reduce date ranges for volume queries

  • Filter by specific activity types

  • Disable detailed breakdowns (includeActivityBreakdown: false)

Server Not Starting

  • Ensure Node.js version is 20 or higher

  • Run pnpm build to rebuild after changes

  • Check server logs for authentication errors

Contributing

Contributions are welcome! Please ensure:

  • All tests pass (pnpm test:run)

  • Type checking passes (pnpm typecheck)

  • Code follows existing style guidelines

  • New features include tests

Attribution

This project started from garmin-connect-mcp by Evgenii Podivilov, at version 0.4.0, used under the MIT License. That codebase provided the MCP server scaffolding, the Garmin Connect client wrapper and the original read tools.

It is maintained here as an independent project rather than a fork, so it can diverge without waiting on upstream. Work added since the import:

  • Multi-sport structured workouts (cycling, swimming and other, not just running)

  • VO2max readings at full precision, rather than the integer the Garmin UI rounds to

  • Per-lap activity splits, so individual intervals can be analysed instead of type totals

  • Race predictions, overnight HRV, and aggregated training status

  • Configured HR zones and the basis they are derived from, which decides what every reported zone actually means

  • Per-activity time in zone

  • Training readiness

See LICENSE for the full notice, which retains the original copyright as the MIT License requires.

License

MIT - see LICENSE.

Available Tools

24 tools
create_running_workoutA

Create a structured workout in Garmin Connect. Defaults to running; set sport to 'cycling', 'swimming' or 'other' for non-running workouts. Build workouts with warmup, intervals, recovery, cooldown, and repeat blocks. Supports time-based, distance-based, and lap-button durations. Supports pace, HR zone, and no-target intensity controls.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesWorkout name (required)
sportNoSport type for the workout. Defaults to 'running' when omitted.
stepsYesArray of workout steps (required, at least one step)
descriptionNoOptional workout description

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses the supported building blocks (time/distance/lap-button durations, pace/HR-zone/no-target intensities) beyond the schema. However, for a mutation tool it omits whether the result is persisted but unscheduled, whether it requires authentication, and whether repeat blocks nest arbitrarily — real behavioral gaps.

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

Conciseness5/5

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

Four short sentences, front-loaded with the core action, then defaults, then capabilities. Each sentence contributes distinct information and there is no filler or repetition.

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

Completeness3/5

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

There is no output schema, so the description need not cover return values, and the deep nested steps schema is partially summarized. What is missing is the create/schedule lifecycle position relative to schedule_workout and any auth or persistence notes — modest but real gaps for a complex mutation tool.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter is already documented in the schema. The description's mention of the sport enum values and step structure largely restates schema content, adding little syntax or constraint detail beyond it. Baseline 3 is appropriate.

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

Purpose4/5

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

States a specific verb and resource ('Create a structured workout in Garmin Connect') and enumerates what a workout can contain (warmup, intervals, recovery, cooldown, repeat blocks). It does not name or contrast with the closest sibling, schedule_workout, so the create-vs-schedule distinction is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

The description tells the agent the default sport and how to override it, which is really parameter guidance rather than when-to-use guidance. It never says when to use this tool versus schedule_workout, nor whether the created workout is merely saved or also placed on the calendar — a critical routing question given the sibling set.

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

delete_workoutA

Permanently delete a workout from Garmin Connect library. This also removes the workout from all calendar dates where it was scheduled. This operation cannot be undone.

ParametersJSON Schema
NameRequiredDescriptionDefault
workoutIdYesThe workout ID to delete (from create_running_workout or get_scheduled_workouts response)

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It clearly states the operation is permanent, cannot be undone, and also removes the workout from all calendar dates. This provides good behavioral transparency for a delete action.

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

Conciseness5/5

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

Three sentences efficiently convey the main action, key side effect, and permanence. No wasted words, 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.

Completeness4/5

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

For a simple single-parameter tool with no output schema, the description sufficiently covers behavior and side effects. Minor gap: does not hint at response format (e.g., success indicator), but overall complete.

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

Parameters3/5

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

Schema coverage is 100%, and the schema description already specifies where to obtain the workoutId. The description adds no additional meaning beyond the schema, so baseline score of 3 applies.

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

Purpose5/5

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

The description clearly states the action ('permanently delete') and resource ('workout from Garmin Connect library'). It distinguishes from sibling tools like create_running_workout (create), get_workout_details (read), and unschedule_workout (remove from calendar only), as it specifies permanent deletion and calendar removal.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

The description does not provide explicit guidance on when to use this tool versus alternatives like unschedule_workout (which only removes from calendar) or when not to use it. No prerequisites or conditions are mentioned, leaving the agent 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_activitiesA

Get list of recent activities with optional filtering and pagination

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of activities to return (max 50, default: 20)
startNoStarting index for pagination (default: 0)
summaryNo[DEPRECATED: Use includeSummaryOnly] Return compact summary format instead of detailed data (default: false)
includeSummaryOnlyNoReturn compact summary format instead of detailed data (default: false)

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description carries full burden. It only states the tool lists activities with filters and pagination, lacking disclosure on read-only nature, definition of 'recent', or potential side effects. The behavior is under-described.

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

Conciseness5/5

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

Single sentence that is front-loaded with the verb and resource. No extraneous information. Every word serves a purpose.

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

Completeness3/5

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

The description is minimal; it does not explain what 'activities' are, how they are sorted, or whether results are limited to a recent timeframe. Without an output schema, details about return format or behavior are missing, but complexity is low.

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

Parameters3/5

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

Schema coverage is 100%, so each parameter is already documented in the schema. The description adds 'optional filtering and pagination' but does not provide additional meaning beyond the schema's descriptions. Baseline score of 3 is appropriate.

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

Purpose5/5

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

Description clearly states the tool's function: 'Get list of recent activities with optional filtering and pagination'. It specifies a distinct resource ('activities') and differentiates from siblings like 'get_activity_details' or 'get_daily_overview'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

Description implies usage for listing recent activities but provides no explicit guidance on when to use this tool over others (e.g., when to use 'get_activity_details' for a single activity). No exclusions or alternatives are mentioned.

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

get_activity_detailsC

Get detailed information for a specific activity

ParametersJSON Schema
NameRequiredDescriptionDefault
activityIdYesThe unique ID of the activity to retrieve

TDQS

C2.9/5.0
Behavior2/5

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

No annotations provided. The description only states it retrieves information, but omits details about side effects, permissions, or what constitutes 'detailed information'. Minimal behavioral disclosure.

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

Conciseness4/5

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

The description is a single concise sentence with no unnecessary words. It is appropriately front-loaded but could benefit from slightly more detail without sacrificing conciseness.

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

Completeness2/5

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

Given no output schema and many sibling tools, the description lacks completeness. It does not specify what kind of details are returned, making it hard for an agent to determine if this tool meets the need for specific data like metrics or workout details.

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

Parameters3/5

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

Schema description coverage is 100% with a clear description for 'activityId'. The tool description adds no extra semantic value beyond the schema. Baseline 3 is appropriate.

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

Purpose4/5

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

The description clearly states it retrieves detailed information for a specific activity. The verb 'Get' and resource 'detailed information for a specific activity' are specific, but it does not explicitly differentiate from siblings like 'get_activities' which likely returns a list. However, the tool name and parameter imply a single resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like 'get_activities' or 'get_workout_details'. The description provides no contextual cues for selection.

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

get_activity_hr_zonesA

Get time spent in each heart rate zone during one activity, with each zone's share of the session. Average HR hides distribution — use this to tell an evenly aerobic run from one that swung between too hard and too easy.

ParametersJSON Schema
NameRequiredDescriptionDefault
activityIdYesThe activity ID (from get_activities)

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the return content (time in each zone and each zone's share) but says nothing about permissions, rate limits, or behavior for invalid/missing activity IDs. Adequate for a simple read-by-ID tool, but not rich.

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

Conciseness5/5

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

Two tight sentences: the first front-loads the operation and output, the second justifies usage. 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.

Completeness4/5

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

For a single-param read tool with no output schema and full schema coverage, the description gives the agent enough to call it correctly and understand what comes back. Minor gaps are the lack of error/empty-data handling notes, which are low-stakes here.

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

Parameters3/5

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

Schema description coverage is 100% and the single parameter is documented in the schema, including its source ('from get_activities'). The description adds no syntax or format detail beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource — time spent in each HR zone for one activity — plus the response shape (per-zone share). The scoping phrase 'during one activity' implicitly separates it from sibling zone/config tools like get_hr_zones. It stops short of explicitly naming the sibling it differs from.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

Offers a concrete decision rationale ('Average HR hides distribution — use this to tell an evenly aerobic run from one that swung between too hard and too easy'), which tells the agent when this is the right tool. It does not name specific alternatives or exclusions among the many sibling getters, so it falls short of a 5.

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

get_activity_lapsA

Get per-lap splits for one activity — the individual interval reps with pace, HR and cadence, rather than the aggregated totals get_activity_details returns. Essential for analysing whether an interval session held pace or faded.

ParametersJSON Schema
NameRequiredDescriptionDefault
activityIdYesThe activity ID (from get_activities)

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the disclosure burden, and it does state the data returned (per-lap pace, HR, cadence) and its granularity relative to the aggregate tool. It stops short of stating it is a read-only operation or how empty/partial lap data behaves, so it is strong 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.

Conciseness5/5

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

Two sentences, zero waste, and the core purpose plus the sibling contrast are front-loaded. Every clause earns its place by either defining scope or routing the agent.

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

Completeness4/5

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

For a single-parameter read tool with no output schema, the description covers what is returned and when to prefer it over the sibling. It could say more about the shape of per-lap data or missing laps, but an agent has enough to call it correctly.

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

Parameters3/5

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

Schema description coverage is 100% for the single activityId parameter, so the schema already documents it fully. The description adds no format or sourcing detail beyond what the schema provides, making the baseline 3 appropriate.

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

Purpose5/5

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

States a specific verb and resource ('get per-lap splits for one activity') and pins the scope precisely as individual interval reps with pace, HR and cadence. It explicitly contrasts itself with get_activity_details, so an agent can separate the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

Names the alternative ('rather than the aggregated totals get_activity_details returns') and gives the selecting condition ('essential for analysing whether an interval session held pace or faded'). The when-to-use versus sibling is fully explicit.

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

get_daily_overviewA

Get a comprehensive daily overview including sleep, activities, and health metrics

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoDate in YYYY-MM-DD format (defaults to today)

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are present, so the description carries full behavioral burden. It only states what data is included but does not disclose behavioral traits such as authentication requirements, rate limits, or what happens on dates with missing data. Since it describes a read operation, destructive behavior is not an issue, but transparency is minimal.

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

Conciseness5/5

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

The description is a single, efficient sentence (11 words) that front-loads the key action and scope. Every word is necessary. No redundant or verbose phrasing. This is an exemplar of conciseness given the tool's simplicity.

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

Completeness3/5

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

Given the tool has one optional parameter, no output schema, and no annotations, the description is moderately complete. It lists high-level categories (sleep, activities, health metrics) but does not detail which specific health metrics are included. It provides a general idea but lacks precision on exact outputs, which is acceptable for a high-level overview tool.

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

Parameters3/5

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

Schema description coverage is 100% for the single parameter 'date', already including format and default behavior. The description adds no additional meaning beyond the schema. Baseline score of 3 applies because the parameter is well-documented in the schema, and the description provides no extra semantic value.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Get a comprehensive daily overview including sleep, activities, and health metrics.' This specifies the action (get), resource (overview), and scope (sleep, activities, health metrics), distinguishing it from more granular sibling tools like get_sleep_data or get_activities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

Usage guidelines are only implied: the description suggests using this when an overview of daily metrics is needed, but lacks explicit when-to-use or when-not-to-use guidance. No alternatives are mentioned, though siblings provide more specific data. The single optional parameter with a default makes usage simple but leaves room for ambiguity.

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

get_health_metricsB

Get aggregated health metrics for a specific date

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoDate in YYYY-MM-DD format (defaults to today)
metricsNoSpecific metrics to include (defaults to all)

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, and the description does not disclose behavioral traits such as read-only status, performance implications, or data aggregation method. It merely repeats the function name.

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

Conciseness5/5

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

The description is a single sentence with no wasted words. It is front-loaded and concise.

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

Completeness3/5

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

Given no output schema and no annotations, the description is adequate but lacks details on output format or aggregation specifics. It could be more helpful for an agent to understand the returned data.

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

Parameters3/5

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

Schema coverage is 100%, and parameters have descriptions in the schema. The tool description adds no additional meaning beyond the schema, so baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'Get', resource 'aggregated health metrics', and constraint 'for a specific date'. It distinguishes itself from sibling tools like get_heart_rate_data or get_hydration_data, which focus on individual metrics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as individual metric tools. The description does not mention use cases or when not to use it.

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

get_heart_rate_dataC

Get detailed heart rate data for a specific date

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoDate in YYYY-MM-DD format (defaults to today)
summaryNo[DEPRECATED: Use includeSummaryOnly] Return only summary data instead of detailed breakdown (default: false)
includeSummaryOnlyNoReturn only summary data instead of detailed breakdown (default: false)

TDQS

C2.9/5.0
Behavior2/5

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 only says 'Get' (implying read-only) but does not disclose any other behavioral traits such as rate limits, authentication needs, or what 'detailed' vs 'summary' means in terms of output structure.

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

Conciseness4/5

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

A single sentence is very concise and front-loaded with the key action. However, it could be expanded slightly to cover key behavioral aspects without being verbose. It earns a 4 for efficiency but not a 5 due to the sacrifice of completeness.

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

Completeness2/5

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

Given no output schema and no annotations, the description should explain return values and behavior (e.g., what detailed vs summary includes). It does not mention that 'date' defaults to today (though schema does). The description is too sparse to be considered complete for a tool with multiple parameters and possible outputs.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters. The description adds the word 'detailed' which relates to the includeSummaryOnly parameter, but this is minimal extra meaning. The baseline of 3 is appropriate as the description does not significantly enhance understanding beyond the schema.

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

Purpose4/5

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

The description clearly states 'Get detailed heart rate data for a specific date', specifying the verb and resource. However, it does not differentiate from sibling tools like 'get_health_metrics' which might also return heart rate data, so it loses one point for lack of sibling distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. There is no mention of prerequisites, context, or explicit exclusions. The agent has 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_hrvA

Get overnight heart rate variability: last night's average, weekly average, baseline range and status (BALANCED / UNBALANCED / LOW). A recovery and autonomic-load marker.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoDate in YYYY-MM-DD format (defaults to today)

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden, and it does disclose the returned payload and the status domain (BALANCED / UNBALANCED / LOW), which is genuinely useful behavioral context. It stops short of stating that it is a read-only, single-record lookup or what happens when overnight 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.

Conciseness5/5

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

Two tight sentences, front-loaded with the core purpose and followed by supporting context. Every clause earns its place with no redundancy.

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

Completeness4/5

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

With no output schema, the description appropriately lists the return components, and the single parameter is fully covered by the schema. It is nearly complete, missing only edge-case behavior such as absent overnight data or the default-date fallback (which the schema does mention).

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

Parameters3/5

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

Schema description coverage is 100% and the single 'date' parameter is fully documented in the schema (format and default). The description adds no parameter-level meaning beyond that, so the baseline of 3 applies.

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

Purpose5/5

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

States a specific verb ('Get') and a precisely scoped resource ('overnight heart rate variability'), then enumerates exactly what is returned (last night's average, weekly average, baseline range, status). This clearly separates it from generic siblings like get_heart_rate_data and get_health_metrics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

The phrase 'A recovery and autonomic-load marker' implies the context in which the value matters, but there is no explicit when-to-use/when-not guidance and no named alternative among the many sibling tools. Usage is only implied.

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

get_hr_zonesA

Get the heart rate zones configured on the account, per sport, and crucially which basis they are calculated from (max HR, heart rate reserve, or lactate threshold). The same percentage band maps to very different bpm depending on the basis, so check this before interpreting any zone the watch reports.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the disclosure burden and does well: it reveals that zones are per-sport and that the calculation basis (max HR, HRR, lactate threshold) materially changes the bpm mapping. It does not mention permissions or return shape, but for a no-param read tool the key behavioral nuance is surfaced.

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

Conciseness5/5

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

Two sentences, no filler. The core output (zones per sport) and the critical caveat (the calculation basis) are both front-loaded, with the interpretive warning following immediately after.

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

Completeness4/5

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

No output schema exists, and the description conceptually covers what is returned (zones per sport plus their basis). Combined with zero input parameters, this is nearly complete; only minor details like whether the response is fixed-size or per-sport structured data are left implicit.

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

Parameters4/5

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

The tool takes zero parameters, so per the rubric the baseline is 4. There is nothing to disambiguate in the schema, and the description introduces no parameters of its own.

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

Purpose5/5

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

States a specific verb and resource ('Get the heart rate zones configured on the account, per sport') and scopes it to account configuration, which distinguishes it from the sibling get_activity_hr_zones (zones tied to a specific activity). An agent can route between the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

Gives clear usage context: 'check this before interpreting any zone the watch reports.' It does not explicitly name get_activity_hr_zones as the alternative for activity-scoped zones or state exclusions, so it falls short of the 5 bar.

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

get_hydration_dataB

Get daily hydration (water intake) data for a specific date

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoDate in YYYY-MM-DD format (defaults to today)

TDQS

B3.2/5.0
Behavior2/5

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

No annotations exist, so the description must fully disclose behavior. It only states 'get', implying read-only, but offers no details on permissions, side effects, or other behavioral traits beyond what the name suggests.

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

Conciseness5/5

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

A single sentence delivers the core purpose without any superfluous words. Every word earns its place.

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

Completeness4/5

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

Given the tool's simplicity (one optional parameter, no output schema), the description is reasonably complete. The schema covers the default behavior and format. However, a brief note about the output (e.g., total water volume) would enhance completeness.

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

Parameters3/5

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

Schema description coverage is 100% (single 'date' parameter already described in input schema). The description ('for a specific date') adds no new meaning beyond the schema's 'Date in YYYY-MM-DD format (defaults to today)'. Baseline 3 applies.

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

Purpose4/5

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

The description clearly states 'Get daily hydration (water intake) data for a specific date', specifying the verb, resource, and scope. It distinguishes from sibling tools like get_sleep_data by focusing on hydration, though it does not explicitly differentiate alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives (e.g., get_health_metrics). It simply states what it does without context or prerequisites.

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

get_race_predictionsA

Get Garmin's own predicted race times for 5K, 10K, half marathon and marathon, based on current fitness.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses provenance ('Garmin's own' prediction, derived from current fitness), distinguishing it from locally computed estimates, but says nothing about data freshness, sync requirements, or what happens when no running history exists.

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

Conciseness5/5

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

One front-loaded sentence covering verb, source, derived basis, and the four return values. No filler or redundancy.

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

Completeness4/5

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

For a parameterless read with no annotations or output schema, the description adequately conveys what comes back. Minor gap: it doesn't hint that predictions may be absent or stale when fitness data is missing.

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

Parameters4/5

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

The tool takes zero parameters, so the schema cannot mislead and the description correctly adds no parameter detail. Baseline 4 applies for a no-argument tool.

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

Purpose5/5

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

States a specific verb ('Get') and a precise resource ('Garmin's own predicted race times'), and enumerates the four distances returned. No sibling tool in the list overlaps with race predictions, so an agent can select this without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

The description says what the tool returns but never states when to reach for it versus alternatives such as get_vo2max or get_training_status, which also reflect current fitness. No preconditions or exclusions are given.

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

get_scheduled_workoutsA

Get scheduled workouts from Garmin Connect calendar for a date range. Defaults to the current week (Monday to Sunday) if dates not provided. Returns list of scheduled workouts with details including scheduleId for unscheduling.

ParametersJSON Schema
NameRequiredDescriptionDefault
endDateNoEnd date in YYYY-MM-DD format (optional, defaults to current week Sunday)
startDateNoStart date in YYYY-MM-DD format (optional, defaults to current week Monday)

TDQS

A4/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It notes return includes scheduleId, but lacks details on rate limits, authentication, or response when no workouts found. 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.

Conciseness5/5

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

Two efficient sentences: first states purpose, second provides defaults and key return detail. No wasted words, front-loaded.

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

Completeness4/5

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

No output schema, but description states return includes list with scheduleId. Covers usage for optional params and default behavior. Could mention more details about returned fields, but sufficient for typical retrieval.

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

Parameters4/5

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

Schema has 100% description coverage, and description adds meaningful context about defaulting to current week (Monday to Sunday). This adds value beyond the schema's parameter descriptions.

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

Purpose5/5

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

Clearly states verb 'Get', resource 'scheduled workouts', and scope 'for a date range'. Distinguishes from siblings like schedule_workout and unschedule_workout, and implies differentiation from get_workout_details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

Provides context on default date range behavior, but does not explicitly contrast with other get tools like get_activities or get_workout_details. No clear when-to-use or when-not-to-use guidance.

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

get_sleep_dataB

Get detailed sleep data for a specific date from Garmin Connect

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoDate in YYYY-MM-DD format (defaults to today)
fieldsNoSpecific fields to include (e.g., ['dailySleepDTO', 'wellnessEpochSummaryDTO'])
summaryNo[DEPRECATED: Use includeSummaryOnly] Return only summary data instead of detailed breakdown (default: false)
includeSummaryOnlyNoReturn only summary data instead of detailed breakdown (default: false)

TDQS

B3.3/5.0
Behavior3/5

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

No annotations exist, so the description carries full burden. It implies a read-only operation but does not disclose any behavioral traits such as side effects, rate limits, or error behavior. The description adds minimal value 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.

Conciseness5/5

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

The description is a single, clear sentence with no superfluous words. It is front-loaded and efficient.

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

Completeness3/5

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

Given the tool has no output schema and four parameters, the description is minimal. It lacks information about return format, data structure, or edge cases. While the schema covers parameters, the agent may need more context on what 'sleep data' entails.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description does not comment on parameters; it adds no semantic value beyond what the schema already provides.

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

Purpose4/5

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

The description clearly identifies the tool as retrieving sleep data for a specific date from Garmin Connect. However, it does not differentiate from sibling tools like get_health_metrics or get_heart_rate_data, which also retrieve data by date.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus other health-related get tools. The description lacks context for appropriate usage or conditions where it should be preferred.

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

get_training_readinessA

Get training readiness for a date: the score the device derives from sleep, recovery time, HRV and recent load. A go / hold check before a hard session.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoDate in YYYY-MM-DD format (defaults to today)

TDQS

A4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the burden, and it does disclose the meaningful behavior: the score is derived by the device from sleep, recovery time, HRV and recent load, and it functions as a go/hold gate. It does not mention read-only safety, date defaults, or return shape, but for a single-date read that is a modest gap.

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

Conciseness5/5

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

Two short sentences, front-loaded with the verb and resource, then the derivation, then the purpose. Nothing is padded or redundant.

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

Completeness4/5

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

For a simple one-parameter read with no output schema and no annotations, the description is nearly sufficient: it explains what the score means and when to consult it. Missing only minor details such as the default-to-today behavior and confirmation that it is a non-mutating read.

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

Parameters3/5

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

Schema description coverage is 100% and the single date parameter is fully documented in the schema, including the YYYY-MM-DD format and the today default. The description adds only "for a date", so the baseline 3 is correct — the schema does the heavy lifting.

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

Purpose4/5

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

Names a specific verb and resource (get training readiness for a date) and defines what the value actually is — a device-derived score from sleep, recovery time, HRV and recent load. That is far more than a restatement of the name, though it never explicitly distinguishes itself from the closely named sibling get_training_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

"A go / hold check before a hard session" gives a clear decision context for when to reach for this tool rather than a raw metric tool. It stops short of naming alternatives (e.g., get_hrv, get_training_status) or stating exclusions, so it is context without routing.

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

get_training_statusB

Get Garmin's aggregated training status for a date, including the most recent VO2max reading and load balance.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoDate in YYYY-MM-DD format (defaults to today)

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the behavioral burden. It does disclose the composition of the returned aggregate (VO2max reading + load balance), which is useful, but it says nothing about authentication requirements, data availability/latency, or what happens when no status exists for the given date. Read-only nature is only implied by the verb 'Get'.

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

Conciseness5/5

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

One sentence, front-loaded with the core verb and resource, with the included data points as a trailing clarifier. No redundant or padded language.

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

Completeness4/5

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

For a one-parameter, read-only lookup with a fully documented schema and no output schema, the description covers what the tool returns at a high level. The main omission is routing guidance relative to the several overlapping training/VO2max siblings, which an agent might need to choose correctly.

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

Parameters3/5

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

Schema description coverage is 100% and the single 'date' parameter already documents the YYYY-MM-DD format and the default-to-today behavior. The description only says 'for a date' and adds no format, range, or timezone semantics beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

Names a specific verb ('Get') and resource ('Garmin's aggregated training status'), plus the two data points included (most recent VO2max and load balance). This helps distinguish it from siblings like get_vo2max and get_training_stress_balance, though it doesn't explicitly state how it differs from them or from 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.

Usage Guidelines2/5

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

The description gives no guidance on when to prefer this aggregated view over the sibling tools (get_training_readiness, get_vo2max, get_training_stress_balance) that surface the same underlying signals. Usage is only implied by the tool name and the word 'aggregated'.

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

get_training_stress_balanceA

Get training stress balance (TSB), chronic training load (CTL), and acute training load (ATL) for a specific date. TSB = CTL - ATL indicates form/freshness. Uses HR-based TSS calculation when available, falls back to duration estimates.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoTarget date in YYYY-MM-DD format (defaults to today)
daysNoNumber of days of historical data to analyze (default: 90, min: 7, max: 365)
maxHRNoCustom maximum heart rate for TSS calculation (default: 185 bpm)
summaryNo[DEPRECATED: Use includeSummaryOnly] Return only summary data without time-series (default: false)
restingHRNoCustom resting heart rate for TSS calculation (default: 50 bpm)
thresholdHRNoCustom threshold heart rate for TSS calculation (default: 90% of maxHR)
includeTimeSeriesNoInclude daily time series data showing TSS, CTL, ATL, TSB progression (default: true)
includeSummaryOnlyNoReturn only summary data without time-series (default: false)

TDQS

A4.5/5.0
Behavior4/5

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

Despite no annotations, the description discloses the core behavior: TSB calculation, reliance on HR-based TSS with fallback to duration estimates. It does not cover potential side effects or auth needs, but the read-only nature is clear and the calculation logic is transparent.

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

Conciseness5/5

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

Two sentences that front-load the key outputs (TSB, CTL, ATL) and provide a concise explanation. Every word is meaningful, with no repetition or fluff.

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

Completeness5/5

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

Given 8 optional parameters, no output schema, and no annotations, the description adequately covers the tool's functionality, calculations, and fallback behavior. An AI agent can determine when to use it and what to expect.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value by explaining the TSB formula and fallback calculation, which goes beyond the parameter descriptions. For example, it clarifies how the parameters like HR settings relate to the output metrics.

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

Purpose5/5

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

The description clearly identifies the tool as retrieving training stress balance (TSB), chronic training load (CTL), and acute training load (ATL) for a specific date, and explains the formula TSB = CTL - ATL. This distinguishes it from siblings like get_activities or get_workout_details, which serve different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

The description effectively communicates the tool's use case (assessing training form/freshness via TSB) and explains the calculation methods. While it doesn't explicitly state when not to use it or list alternatives, the sibling tools are sufficiently disparate that confusion is unlikely.

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

get_vo2maxA

Get VO2max history with one-decimal precision. Garmin's UI rounds VO2max to a whole number, which can sit unchanged for months while the underlying value moves — use this to see the real trend. Defaults to the last 90 days.

ParametersJSON Schema
NameRequiredDescriptionDefault
endDateNoEnd date in YYYY-MM-DD format (defaults to today)
startDateNoStart date in YYYY-MM-DD format (defaults to 90 days ago)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does disclose two useful behavioral facts: one-decimal precision and the default 90-day window. It stops short of stating read-only nature or return shape, but the rounding nuance is genuinely non-obvious context an agent could not infer from 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.

Conciseness5/5

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

Three short sentences, all front-loaded: what it does, why it matters, and the default window. No filler or restatement of the tool name.

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

Completeness4/5

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

No output schema exists, so the description should ideally sketch the returned series shape, which it only implies via 'history' and 'trend'. Otherwise complete for a two-optional-date read tool, with the default window and precision behavior explained.

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

Parameters3/5

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

Schema description coverage is 100%, so both date parameters and their formats are already fully documented. The description only restates the 90-day default, adding no syntax or constraint detail beyond the schema; baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Get VO2max history') and immediately differentiates itself from siblings with the precision framing, which no other tool in the list shares. An agent can distinguish this from get_health_metrics or get_daily_overview without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

Gives a clear motivating condition — Garmin's UI rounds to whole numbers and can appear static for months, so use this to see the real trend. It doesn't name an explicit alternative or exclusion, but the when-to-use context is concrete and actionable.

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

get_weekly_volumeC

Get weekly training volume aggregation for a specific week

ParametersJSON Schema
NameRequiredDescriptionDefault
weekNoISO week number (defaults to current week)
yearNoYear (defaults to current year)
activityTypesNoFilter by specific activity types (e.g., ['running', 'cycling'])
includeTrendsNoInclude comparison with previous week (default: false)
maxActivitiesNoMaximum number of activities to process (default: 1000)
includeActivityBreakdownNoInclude breakdown by activity type (default: true)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations provided, and the description does not disclose behavioral traits such as data freshness, authentication requirements, or processing limits. The tool's behavior (e.g., aggregation method) is unclear.

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

Conciseness4/5

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

Single sentence, front-loaded with verb and resource. No redundancy, though it could be slightly more specific without becoming verbose.

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

Completeness2/5

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

With 6 parameters, no output schema, and no annotations, the description is too minimal. It does not explain what the aggregation returns (e.g., total distance, duration, count) or how parameters like 'includeTrends' affect output.

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

Parameters3/5

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

Schema coverage is 100% with each parameter described inline. The description adds no additional meaning beyond the schema, such as how parameters interact or how 'maxActivities' affects volume calculation.

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

Purpose4/5

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

Description clearly states the tool retrieves weekly training volume aggregation, distinguishing it from sibling tools like get_activities (individual activities) or get_daily_overview (daily data). The term 'volume aggregation' is unambiguous in context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives (e.g., get_activities for raw data, get_daily_overview for daily summaries). The description lacks explicit context or exclusions.

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

get_weight_dataA

Get weight and body composition data for a specific date

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoDate in YYYY-MM-DD format (defaults to today)

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the burden. It indicates a read operation (Get) but does not disclose behavioral details such as handling of missing dates, multiple records, or error cases. The default behavior is only hinted in the parameter schema, not the description.

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

Conciseness5/5

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

The description is a single, concise sentence with no redundant words, efficiently conveying the tool's purpose.

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

Completeness3/5

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

Despite simplicity and no output schema, the description leaves the agent unaware of the return structure (e.g., which body composition fields). For a tool retrieving multiple metrics, this is incomplete.

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

Parameters3/5

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

Parameter schema coverage is 100% with a clear description for the date parameter. The main description adds no extra meaning beyond what the schema already provides, so score is at baseline.

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

Purpose5/5

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

The description clearly states the verb 'Get' and the resource 'weight and body composition data', and specifies the scope 'for a specific date'. This uniquely identifies the tool among siblings like get_heart_rate_data or get_hydration_data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. The description does not mention any conditions, prerequisites, or comparisons to sibling tools like get_health_metrics or get_daily_overview.

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

get_workout_detailsA

Get detailed information for a specific workout including steps, targets, and duration. Returns the complete workout structure with formatted step information.

ParametersJSON Schema
NameRequiredDescriptionDefault
workoutIdYesThe workout ID to retrieve details for (from create_running_workout or get_scheduled_workouts response)

TDQS

A3.6/5.0
Behavior3/5

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

Without annotations, the description implies a read operation but adds minimal behavioral context beyond stating it returns 'complete workout structure'. It does not disclose potential errors, rate limits, or data freshness, but for a simple retrieval tool 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.

Conciseness5/5

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

Two concise sentences front-load the purpose and immediately specify return content. No extraneous words or redundancy.

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

Completeness4/5

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

Given the tool's simplicity (one required parameter, no output schema), the description adequately conveys the returned data. It could mention error handling or existence guarantees, but the current level is sufficient for a straightforward retrieval.

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

Parameters3/5

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

Schema coverage is 100% and the parameter description provides context by linking to other tools. The tool description adds no further semantic value beyond what the schema already provides, meeting the baseline.

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

Purpose5/5

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

The description clearly states the tool retrieves detailed information for a specific workout, listing steps, targets, and duration. It distinguishes itself from sibling tools like 'get_activities' or 'get_daily_overview' by focusing on a single workout's structure.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as 'get_scheduled_workouts' or 'get_activity_details'. The description does not mention prerequisites or scenarios where this tool is preferred, leaving the agent to infer from context.

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

schedule_workoutA

Schedule a workout to a specific date in Garmin Connect calendar. Use the workoutId from create_running_workout response.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesDate to schedule workout in YYYY-MM-DD format (e.g., '2025-10-13')
workoutIdYesID of the workout to schedule (from create_running_workout response)

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It only states the action without disclosing behavioral traits such as whether it overwrites existing schedules, requires specific permissions, or has side effects. For a mutation tool, this 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.

Conciseness5/5

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

The description is a single, front-loaded sentence with no unnecessary words. It efficiently conveys the tool's purpose and key prerequisite.

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

Completeness4/5

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

For a simple tool with two parameters and no output schema, the description covers the necessary context: the action, the resource, and the dependency on create_running_workout. It is adequately complete for the tool's complexity.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents both parameters. The description reiterates the source of workoutId and the date format but adds minimal new semantic value beyond the schema.

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

Purpose5/5

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

The description clearly states the verb 'Schedule' and the resource 'workout to a specific date in Garmin Connect calendar'. It also references the prerequisite use of workoutId from create_running_workout, distinguishing it from siblings like delete_workout or unschedule_workout.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

The description provides explicit context by instructing the agent to use the workoutId from create_running_workout response, indicating the workflow order. However, it does not explicitly state when not to use this tool or mention alternatives.

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 workout from Garmin Connect calendar. The workout remains in your library for future scheduling. Use the scheduleId from get_scheduled_workouts response.

ParametersJSON Schema
NameRequiredDescriptionDefault
scheduleIdYesThe schedule ID (from get_scheduled_workouts 'scheduleId' field)

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, description discloses that the workout is removed from calendar but persists in library, indicating non-destructive behavior. However, no details on errors, permissions, or side effects 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.

Conciseness5/5

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

Two sentences, front-loaded with the action, no wasted words. Every sentence contributes essential information.

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

Completeness4/5

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

Given low complexity (one parameter, no output schema), the description is adequately complete. It covers the purpose, parameter source, and effect on the library. Could be improved with failure scenarios, but not essential.

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

Parameters4/5

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

Schema already describes scheduleId with 100% coverage. The description adds value by specifying the source ('from get_scheduled_workouts response'), clarifying where to obtain the ID.

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

Purpose5/5

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

Description clearly states 'Remove a workout from Garmin Connect calendar' with a specific verb and resource, and distinguishes from siblings like delete_workout by noting the workout remains in library.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

Provides clear guidance to use 'scheduleId from get_scheduled_workouts response', which helps in correct invocation. Lacks explicit exclusion or when-not-to-use compared to delete_workout, but context is sufficient.

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

Tool Schema Changelog

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

  1. 24 tool updatesv0.5.0
    • First observedcreate_running_workout
    • First observeddelete_workout
    • First observedget_activities
    • First observedget_activity_details
    • First observedget_activity_hr_zones
    • First observedget_activity_laps
    • First observedget_daily_overview
    • First observedget_health_metrics
    • First observedget_heart_rate_data
    • First observedget_hr_zones
    • First observedget_hrv
    • First observedget_hydration_data
    • First observedget_race_predictions
    • First observedget_scheduled_workouts
    • First observedget_sleep_data
    • First observedget_training_readiness
    • First observedget_training_status
    • First observedget_training_stress_balance
    • First observedget_vo2max
    • First observedget_weekly_volume
    • First observedget_weight_data
    • First observedget_workout_details
    • First observedschedule_workout
    • First observedunschedule_workout

TDQS

A3.6/5.0

Scored across 24 tools

Disambiguation4/5

Most tools target clearly distinct endpoints (sleep, HRV, VO2max, hydration, etc.) and descriptions do a good job clarifying boundaries. However, get_daily_overview overlaps with get_sleep_data, get_health_metrics, and get_activities, and the cluster of training metrics (status, readiness, TSB) could confuse without careful reading.

Naming Consistency5/5

All tools follow a consistent snake_case verb_noun pattern: get_*, create_*, schedule_*, unschedule_*, delete_*. The only mild oddity is create_running_workout despite supporting other sports, but the style remains uniform.

Tool Count3/5

24 tools sits in the heavy range and feels borderline for a coaching server. While most map to distinct Garmin endpoints, there is some redundancy (daily overview duplicates other getters) and potential to consolidate.

Completeness4/5

The surface covers activity data, health metrics, training analytics, and the full workout scheduling lifecycle (create, schedule, unschedule, delete, view details). Missing an update_workout operation and tools for courses/routes, but core coaching workflows are supported.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to access and query Garmin Connect health and fitness data, including sleep, HRV, training load, and activities, with an optional coaching plugin for personalized training plans.
    4 npm
    4
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to query live Garmin Connect health and fitness data, including daily metrics, activities, sleep analysis, and trends via natural language.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to read Garmin activities and create/schedule structured workouts and multi-week training plans on Garmin Connect, syncing to the user's watch.
    1
    MIT