Garmin Coach MCP
Integrates with Garmin Connect to read sleep, health metrics, activities, and training volume data, and to write structured multi-sport workouts, calendar scheduling, and performance metrics back into Garmin.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Garmin Coach MCPCreate a 45-minute tempo run and schedule it for tomorrow morning"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Garmin 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
Garmin Connect Account: Active account with data from a compatible Garmin device
Node.js: Version 20 or higher
MCP Client: Claude Desktop, Claude Code, or another MCP-compatible application
Installation
Option 1: Use with npx (Recommended)
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_passwordOr 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@latestThen 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 buildConfigure 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 inYYYY-MM-DDformat (defaults to today)
Example:
Show me my daily overview for yesterdayResponse 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 inYYYY-MM-DDformat (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 nightResponse 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 inYYYY-MM-DDformat (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 inYYYY-MM-DDformat (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 yesterdayResponse 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 inYYYY-MM-DDformat (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 inYYYY-MM-DDformat (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 yesterdayResponse 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 inYYYY-MM-DDformat (defaults to today)
Example:
What's my current weight?
Show me my weight for last weekResponse 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 runResponse 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 weekResponse 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 monthResponse 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 asYYYY-MM-DD/YYYY-MM-DDincludeActivityBreakdown(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 weeksResponse 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 TuesdayTraining 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: truemodeFiltering 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 reportProject 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 filesRunning Tests
# Run all tests
pnpm test:run
# Run with coverage
pnpm test:coverage
# Watch mode for development
pnpm testSecurity
Credential Management
Best Practices:
ā Use environment variables for credentials
ā Use
.envfiles (ensure.envis in.gitignore)ā Use MCP configuration
envorenvFileoptionsā 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_passwordTesting 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
.envfileCheck that MCP configuration points to correct
.envor has correctenvvaluesEnsure 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: truefor condensed resultsReduce 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 buildto rebuild after changesCheck 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 toolscreate_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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Workout name (required) | |
| sport | No | Sport type for the workout. Defaults to 'running' when omitted. | |
| steps | Yes | Array of workout steps (required, at least one step) | |
| description | No | Optional workout description |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workoutId | Yes | The workout ID to delete (from create_running_workout or get_scheduled_workouts response) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of activities to return (max 50, default: 20) | |
| start | No | Starting index for pagination (default: 0) | |
| summary | No | [DEPRECATED: Use includeSummaryOnly] Return compact summary format instead of detailed data (default: false) | |
| includeSummaryOnly | No | Return compact summary format instead of detailed data (default: false) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| activityId | Yes | The unique ID of the activity to retrieve |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| activityId | Yes | The activity ID (from get_activities) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| activityId | Yes | The activity ID (from get_activities) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Date in YYYY-MM-DD format (defaults to today) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Date in YYYY-MM-DD format (defaults to today) | |
| metrics | No | Specific metrics to include (defaults to all) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Date in YYYY-MM-DD format (defaults to today) | |
| summary | No | [DEPRECATED: Use includeSummaryOnly] Return only summary data instead of detailed breakdown (default: false) | |
| includeSummaryOnly | No | Return only summary data instead of detailed breakdown (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavioral disclosure. It 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Date in YYYY-MM-DD format (defaults to today) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Date in YYYY-MM-DD format (defaults to today) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | No | End date in YYYY-MM-DD format (optional, defaults to current week Sunday) | |
| startDate | No | Start date in YYYY-MM-DD format (optional, defaults to current week Monday) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Date in YYYY-MM-DD format (defaults to today) | |
| fields | No | Specific fields to include (e.g., ['dailySleepDTO', 'wellnessEpochSummaryDTO']) | |
| summary | No | [DEPRECATED: Use includeSummaryOnly] Return only summary data instead of detailed breakdown (default: false) | |
| includeSummaryOnly | No | Return only summary data instead of detailed breakdown (default: false) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Date in YYYY-MM-DD format (defaults to today) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Date in YYYY-MM-DD format (defaults to today) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It does 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Target date in YYYY-MM-DD format (defaults to today) | |
| days | No | Number of days of historical data to analyze (default: 90, min: 7, max: 365) | |
| maxHR | No | Custom maximum heart rate for TSS calculation (default: 185 bpm) | |
| summary | No | [DEPRECATED: Use includeSummaryOnly] Return only summary data without time-series (default: false) | |
| restingHR | No | Custom resting heart rate for TSS calculation (default: 50 bpm) | |
| thresholdHR | No | Custom threshold heart rate for TSS calculation (default: 90% of maxHR) | |
| includeTimeSeries | No | Include daily time series data showing TSS, CTL, ATL, TSB progression (default: true) | |
| includeSummaryOnly | No | Return only summary data without time-series (default: false) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | No | End date in YYYY-MM-DD format (defaults to today) | |
| startDate | No | Start date in YYYY-MM-DD format (defaults to 90 days ago) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| week | No | ISO week number (defaults to current week) | |
| year | No | Year (defaults to current year) | |
| activityTypes | No | Filter by specific activity types (e.g., ['running', 'cycling']) | |
| includeTrends | No | Include comparison with previous week (default: false) | |
| maxActivities | No | Maximum number of activities to process (default: 1000) | |
| includeActivityBreakdown | No | Include breakdown by activity type (default: true) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Date in YYYY-MM-DD format (defaults to today) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workoutId | Yes | The workout ID to retrieve details for (from create_running_workout or get_scheduled_workouts response) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Date to schedule workout in YYYY-MM-DD format (e.g., '2025-10-13') | |
| workoutId | Yes | ID of the workout to schedule (from create_running_workout response) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| scheduleId | Yes | The schedule ID (from get_scheduled_workouts 'scheduleId' field) |
TDQS
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.
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.
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.
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.
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.
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.
24 tool updates
v0.5.0- First observed
create_running_workout - First observed
delete_workout - First observed
get_activities - First observed
get_activity_details - First observed
get_activity_hr_zones - First observed
get_activity_laps - First observed
get_daily_overview - First observed
get_health_metrics - First observed
get_heart_rate_data - First observed
get_hr_zones - First observed
get_hrv - First observed
get_hydration_data - First observed
get_race_predictions - First observed
get_scheduled_workouts - First observed
get_sleep_data - First observed
get_training_readiness - First observed
get_training_status - First observed
get_training_stress_balance - First observed
get_vo2max - First observed
get_weekly_volume - First observed
get_weight_data - First observed
get_workout_details - First observed
schedule_workout - First observed
unschedule_workout
TDQS
Scored across 24 tools
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.
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.
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.
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
Related MCP Connectors
AI coach for Garmin: builds training plans and structured workouts, synced straight to your watch.
Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.
- Coach MCPOAuthai.iamcoach
Your endurance training data in your AI assistant: activities, recovery, plan, workout edits.
Connect your health, fitness, nutrition, sleep, and wearable data to your AI assistant.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceEnables AI assistants to access and query Garmin Connect health and fitness data, including sleep, HRV, training load, and activities, with an optional coaching plugin for personalized training plans.4 npm4-
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to access Garmin Connect activities, workouts, and workout templates for querying and creating workout plans.6MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to query live Garmin Connect health and fitness data, including daily metrics, activities, sleep analysis, and trends via natural language.MIT
- AlicenseNot gradedqualityBmaintenanceEnables 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.1MIT