Skip to main content
Glama
JJRPF

Garmin MCP Server

by JJRPF

title: Garmin MCP Server emoji: 🏃 colorFrom: blue colorTo: indigo sdk: docker app_port: 7860 pinned: false

Garmin MCP Server

This Model Context Protocol (MCP) server connects to Garmin Connect and exposes your fitness and health data to Claude and other MCP-compatible clients.

Garmin's API is accessed via the awesome python-garminconnect library.

Related MCP server: health-mcp

Features

  • List recent activities with pagination support

  • Get detailed activity information

  • Edit activities: name, type, description/notes, event type, perceived effort (RPE), and feel

  • Access health metrics (steps, heart rate, sleep, stress, respiration)

  • View body composition data

  • Track training status and readiness

  • Access cycling FTP and lactate threshold metrics

  • Manage gear and equipment

  • Access workouts and training plans

  • Inspect detailed workout step structures, including repeat groups and swim pace targets

  • Weekly health aggregates (steps, stress, intensity minutes)

  • Advanced cycling analytics: power zones, FIT file analysis, DI2 electronic shift intelligence

  • Training load trend (CTL/ATL/TSB), HRV trend, VO2 max trend, respiration rate trend

  • Power Duration Curve, climb detection with VAM, cardiac drift (aerobic decoupling), W/kg calculations

Tool Coverage

This MCP server implements 110+ tools covering ~90% of the python-garminconnect library (v0.3.2):

  • ✅ Activity Management (20 tools) - includes write tools for type, description, event type, perceived effort, and feel

  • ✅ Health & Wellness (31 tools) - includes custom lightweight summary tools

  • ✅ Training & Performance (13 tools) - includes CTL/ATL/TSB, HRV, VO2 max, and respiration trends

  • ✅ Workouts (8 tools)

  • ✅ Devices (7 tools)

  • ✅ Gear Management (5 tools)

  • ✅ Weight Tracking (5 tools)

  • ✅ Challenges & Badges (10 tools)

  • ✅ Nutrition (8 tools) - food logs, meals, custom foods, and food logging

  • ✅ Women's Health (3 tools)

  • ✅ User Profile (3 tools)

  • ✅ High-Level Workout Builders (4 tools) - create and schedule workouts without writing JSON

  • ✅ Courses (3 tools) - list / upload GPX as course / delete course

  • ✅ Activity Analysis (2 tools) - FIT file parsing, Power Duration Curve; requires power meter and/or Di2

  • ✅ Activity File Downloads (2 tools) - download activity files in FIT, GPX, TCX, or CSV format

Note: Activity Analysis tools require a compatible power meter (e.g., Garmin Rally, Favero Assioma, PowerTap P1) and/or Shimano Di2 / SRAM eTap electronic shifting. The fitparse dependency is installed automatically.

Activity File Downloads

Two tools let you download a raw activity file to disk:

  • download_activity_file(activity_id, format="fit", output_dir=None) — downloads the activity and saves it to the configured directory. format accepts fit (default), gpx, tcx, or csv.

  • set_fit_download_dir(path) — sets and persists the default download directory (written to the config file).

Where files are saved (precedence):

  1. output_dir argument — one-off override, not persisted.

  2. GARMIN_FIT_DOWNLOAD_DIR environment variable.

  3. Persisted config set via set_fit_download_dir.

First-run behavior: if no directory is configured, download_activity_file returns status: "needs_setup". The assistant will ask where you want to save files (suggesting the current directory as default), call set_fit_download_dir to persist your choice, and then retry the download automatically.

Intentionally Skipped Endpoints

Some endpoints are not implemented due to performance or complexity considerations:

High Data Volume:

  • get_activity_details() - Returns large GPS tracks and chart data (50KB-500KB). Use get_activity() for summaries instead.

Specialized Workout Formats:

  • upload_running_workout(), upload_cycling_workout(), upload_swimming_workout() - Sport-specific workout uploads. Use upload_workout() for general workouts.

Maintenance & Destructive Operations:

  • delete_activity(), delete_blood_pressure() - Destructive operations require careful consideration.

  • Internal/Auth methods: login(), resume_login(), connectapi(), download() - Handled automatically by the library.

If you need any of these endpoints, please open an issue.

Tool Filtering

This server registers 110+ tools by default, which can be a lot of context for an LLM to carry in every session. You can expose only the tools you need with two optional environment variables:

Env var

Effect

GARMIN_ENABLED_TOOLS

Comma-separated allowlist — if set, only these tools are registered.

GARMIN_DISABLED_TOOLS

Comma-separated denylist — listed tools are skipped. Ignored if an allowlist is set.

Tool names are case-insensitive. With neither variable set, all tools register (unchanged default behaviour). Names that match no tool are ignored with a warning on stderr, which makes typos easy to spot.

Example — expose only sleep, stress, and recent activities:

"env": {
  "GARMIN_ENABLED_TOOLS": "get_sleep_data,get_stress_summary,get_activities"
}

High-level workout tools

These builder tools let an LLM create and schedule workouts without writing raw Garmin JSON.

create_walk_run_workout

Creates a walk/run interval workout with optional heart-rate zone target.

{
  "name": "W3 Mié 2:2",
  "run_seconds": 120,
  "walk_seconds": 120,
  "repeats": 9,
  "warmup_min": 10,
  "cooldown_min": 8,
  "hr_zone": "Z3"
}

Returns: {"status": "success", "workout_id": 1234567890, ...}

create_z2_walk_workout

Creates a steady Z2 walking workout.

{
  "name": "Z2 Walk 45m",
  "duration_min": 45,
  "hr_min": 110,
  "hr_max": 130
}

Returns: {"status": "success", "workout_id": 1234567890, ...}

create_strength_workout

Creates a strength workout from a list of exercises. Each becomes a reps-based step, with the name kept in the step description. The name is also sent as exerciseName, but Garmin only retains that when it matches one of its own exercise keys (e.g. FARMERS_CARRY) — any other value is accepted and then stored empty.

category is optional and passed straight through. Omit it and the key is left out of the payload entirely, which Garmin accepts. Supply it and it must be one of Garmin's exercise categories — anything else, including OTHER and UNASSIGNED, is rejected with 400 - Invalid category. The full list is published at Exercises.json.

{
  "name": "Full Body A",
  "exercises": [
    {"name": "Sentadillas", "sets": 3, "reps": 12, "rest_seconds": 90},
    {"name": "Flexiones",   "sets": 3, "reps": 15, "rest_seconds": 60},
    {"name": "Peso muerto", "sets": 3, "reps": 10, "rest_seconds": 90},
    {"name": "Farmers Carry 40m", "sets": 3, "reps": 1, "rest_seconds": 90, "category": "CARRY"}
  ]
}

Returns: {"status": "success", "workout_id": 1234567890, ...}

schedule_week

Schedules multiple workouts in one call.

{
  "week": [
    {"date": "2026-05-12", "workout_id": 1234567890},
    {"date": "2026-05-14", "workout_id": 1234567891}
  ]
}

Returns: {"status": "complete", "scheduled": [...]}

Full flow example

create_walk_run_workout(name="W3 Mié 2:2", run_seconds=120, walk_seconds=120,
                        repeats=9, warmup_min=10, cooldown_min=8)
  → workout_id = 1560092011

schedule_workout(workout_id=1560092011, date="2026-05-06")
  → OK

After syncing your watch, the workout appears on the Forerunner 965 calendar.

Raw upload_workout end conditions

When building custom workout JSON for upload_workout or upload_workouts, the endCondition.conditionTypeId and endCondition.conditionTypeKey must match Garmin's canonical mapping. Garmin treats the numeric conditionTypeId as the source of truth; if the key and ID conflict, Garmin stores the condition that matches the ID.

For example, this is invalid for a heart-rate end condition because ID 4 is calories, not heart.rate:

{
  "endCondition": {
    "conditionTypeId": 4,
    "conditionTypeKey": "heart.rate"
  },
  "endConditionValue": 145
}

Use ID 6 for heart rate:

{
  "endCondition": {
    "conditionTypeId": 6,
    "conditionTypeKey": "heart.rate"
  },
  "endConditionValue": 145
}

Common end-condition IDs:

ID

Key

1

lap.button

2

time

3

distance

4

calories

5

power

6

heart.rate

7

iterations

8

fixed.rest

9

fixed.repetition

10

reps

11

training.peaks.tss

Raw upload_workout target types

When building raw Garmin workout JSON, targetType.workoutTargetTypeId and targetType.workoutTargetTypeKey must use Garmin's canonical mapping. Garmin treats the numeric ID as authoritative: a mismatched payload such as {"workoutTargetTypeId": 6, "workoutTargetTypeKey": "heart.rate"} is stored as pace.zone, because ID 6 means pace.zone.

For a custom heart-rate range, use target type ID 4 with heart.rate.zone and put the bpm range in targetValueOne / targetValueTwo. These value fields belong on the workout step, alongside targetType; do not nest them inside the targetType object:

{
  "targetType": {
    "workoutTargetTypeId": 4,
    "workoutTargetTypeKey": "heart.rate.zone"
  },
  "targetValueOne": 143,
  "targetValueTwo": 157
}

The same shape applies to a custom running pace range. Pace bounds use meters per second:

{
  "targetType": {
    "workoutTargetTypeId": 6,
    "workoutTargetTypeKey": "pace.zone"
  },
  "targetValueOne": 1.9607843,
  "targetValueTwo": 2.0833333
}

That example represents 8:00–8:30 min/km. The lower numeric bound is listed first for consistency with the heart-rate example; Garmin normalizes either bound order. Garmin silently discards values nested inside targetType, leaving a pace target with no active range. The upload tools repair that unambiguous nesting mistake, but reject the request if nested and step-level values conflict.

For a named Garmin HR zone, use the same target type with zoneNumber instead:

{
  "targetType": {
    "workoutTargetTypeId": 4,
    "workoutTargetTypeKey": "heart.rate.zone"
  },
  "zoneNumber": 3
}

Use either zoneNumber or targetValueOne / targetValueTwo on a target, not both. Garmin treats the named zone as authoritative and silently discards a coexisting custom range, so the upload tools reject that ambiguous shape.

One-click Install (Claude Desktop)

The easiest way to add this server to Claude Desktop is via the .dxt Desktop Extension file — no JSON editing required.

Download and install

  1. Download the latest garmin-mcp.dxt from the Releases page.

  2. Drag the .dxt file into the Claude Desktop window, or double-click it, or go to Settings → Extensions → Install Extension and select the file.

  3. Claude Desktop will prompt you for optional configuration (token path, email, password).

First-time authentication

The extension installs and runs the server automatically, but you must authenticate with Garmin once before data can be fetched:

uvx --python 3.12 --from git+https://github.com/Taxuspt/garmin_mcp garmin-mcp-auth

This saves OAuth tokens to ~/.garminconnect. After that the server works without any credentials in the config.

Note: Tokens are valid for approximately 6 months. Re-run garmin-mcp-auth when they expire.

Build the .dxt yourself

bash scripts/build_dxt.sh   # produces garmin-mcp.dxt in the repo root

Setup

Quick Start for MCP Clients

The easiest way to use this MCP server with Claude Desktop, Codex, or another MCP client is to authenticate once before adding the server to your configuration.

Prerequisites

  • Python 3.12+

  • Garmin Connect account

  • MFA may be required if enabled on your account

Step 1: Pre-authenticate (One-time)

Before adding the server to your MCP client, authenticate once in your terminal:


# Install and run authentication tool
uvx --python 3.12 --from git+https://github.com/Taxuspt/garmin_mcp garmin-mcp-auth

# You'll be prompted for:
# - Email (or set GARMIN_EMAIL env var)
# - Password (or set GARMIN_PASSWORD env var)
# - MFA code (if enabled on your account)

# OAuth tokens will be saved to ~/.garminconnect

You can verify your credentials at any time with

uv run garmin-mcp-auth --verify

Note: You can also set credentials via environment variables:

GARMIN_EMAIL=your@email.com GARMIN_PASSWORD=secret garmin-mcp-auth

If you don't have MFA enabled you can also skip garmin-mcp-auth and pass GARMIN_EMAIL and GARMIN_PASSWORD as env variables directly to your MCP client, if supported. For better security, prefer the pre-authentication flow above and keep credentials out of MCP client configuration.

Step 2: Configure Claude Desktop

Add to your Claude Desktop MCP settings WITHOUT credentials:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "garmin": {
      "command": "uvx",
      "args": [
        "--python",
        "3.12",
        "--from",
        "git+https://github.com/Taxuspt/garmin_mcp",
        "garmin-mcp"
      ]
    }
  }
}

Important: No GARMIN_EMAIL or GARMIN_PASSWORD needed in config! The server uses your saved tokens.

Step 3: Restart your MCP client

Your Garmin data is now available to your MCP client.

For Codex and other clients, see the examples below.


Development Setup

  1. Install the required packages on a new environment:

uv sync

Running the Server

Configuration

Your Garmin Connect credentials are read from environment variables:

  • GARMIN_EMAIL: Your Garmin Connect email address

  • GARMIN_EMAIL_FILE: Path to a file containing your Garmin Connect email address

  • GARMIN_PASSWORD: Your Garmin Connect password

  • GARMIN_PASSWORD_FILE: Path to a file containing your Garmin Connect password

  • GARMIN_IS_CN: Set to true to use Garmin Connect China (garmin.cn) instead of the international version (default: false)

  • GARMIN_FIT_DOWNLOAD_DIR: Default directory for downloaded activity files. When set, skips the first-run setup prompt in download_activity_file.

  • GARMIN_FIT_CONFIG: Path to the persisted download-directory config file (default: ~/.garminconnect_fit_config.json).

File-based secrets are useful in certain environments, such as inside a Docker container. Note that you cannot set both GARMIN_EMAIL and GARMIN_EMAIL_FILE, similarly you cannot set both GARMIN_PASSWORD and GARMIN_PASSWORD_FILE.

Transport

By default the server communicates over stdio, which is what Claude Desktop, the MCP Inspector, and most local clients expect. To serve over HTTP instead (e.g. when running in a container or Kubernetes), set the transport via environment variables:

  • GARMIN_MCP_TRANSPORT: stdio (default), streamable-http, or sse

  • GARMIN_MCP_HOST: bind address for HTTP transports (default 127.0.0.1; set to 0.0.0.0 only when the endpoint is fronted by an authenticating reverse proxy)

  • GARMIN_MCP_PORT: bind port for HTTP transports (default 8000)

GARMIN_MCP_TRANSPORT=streamable-http garmin-mcp

When an HTTP transport is selected:

  • MCP clients connect to the /mcp path (e.g. http://localhost:8000/mcp).

  • A plain GET /healthz endpoint is exposed for liveness/readiness probes.

The server itself performs no authentication on the HTTP endpoint — put it behind a reverse proxy (nginx, Traefik, Authelia, etc.) if it is reachable beyond localhost.

Garmin Connect China (garmin.cn)

If you use Garmin Connect China (garmin.cn) instead of the international version, set the GARMIN_IS_CN environment variable to true:

# Pre-authenticate with Garmin Connect China
GARMIN_IS_CN=true garmin-mcp-auth

# Or use the CLI flag
garmin-mcp-auth --is-cn

For Claude Desktop, add GARMIN_IS_CN to the env section:

{
  "mcpServers": {
    "garmin": {
      "command": "uvx",
      "args": [
        "--python",
        "3.12",
        "--from",
        "git+https://github.com/Taxuspt/garmin_mcp",
        "garmin-mcp"
      ],
      "env": {
        "GARMIN_IS_CN": "true"
      }
    }
  }
}

For Docker, add GARMIN_IS_CN=true to your .env file or uncomment it in docker-compose.yml.

Testing the server locally with MCP Inspector

The Inspector runs directly through npx without requiring installation. Run from the project root:

npx @modelcontextprotocol/inspector uv run garmin-mcp

You'll be able to inspect and test the tools.

With Claude Desktop

  1. Create a configuration in Claude Desktop:

Edit your Claude Desktop configuration file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

You have two options to run the MCP locally with Claude.

Directly from github without cloning the repo:

  1. Add this server configuration:

{
  "mcpServers": {
    "garmin": {
      "command": "uvx",
      "args": [
        "--python",
        "3.12",
        "--from",
        "git+https://github.com/Taxuspt/garmin_mcp",
        "garmin-mcp"
      ],
      "env": {
        "GARMIN_EMAIL": "YOUR_GARMIN_EMAIL",
        "GARMIN_PASSWORD": "YOUR_GARMIN_PASSWORD"
      }
    }
  }
}

You might have to add the full path to uvx you can check the full path with which uvx

  1. Restart Claude Desktop

Directly from your local copy of the repository:

  1. Add this server configuration:

{
  "mcpServers": {
    "garmin-local": {
      "command": "uv",
      "args": [
        "--directory",
        "<full path to your local repository>/garmin_mcp",
        "run",
        "garmin-mcp"
      ]
    }
  }
}
  1. Restart Claude Desktop

With Codex

Codex uses TOML for MCP server configuration. Add one of the following entries to ~/.codex/config.toml after authenticating with garmin-mcp-auth.

You can also ask your MCP-capable client to set this up for you. For example:

Install the Garmin MCP server from https://github.com/Taxuspt/garmin_mcp, authenticate with garmin-mcp-auth, and add it to my MCP configuration without storing my Garmin email or password.

Directly from GitHub without cloning the repo

[mcp_servers.garmin]
command = "uvx"
args = [
  "--python",
  "3.12",
  "--from",
  "git+https://github.com/Taxuspt/garmin_mcp",
  "garmin-mcp"
]

Directly from your local copy of the repository

[mcp_servers.garmin-local]
command = "uv"
args = [
  "--directory",
  "/full/path/to/garmin_mcp",
  "run",
  "garmin-mcp"
]

Restart your MCP client after saving the file.

With opencode

opencode auto-loads a project-level opencode.json when launched from a repository root, so contributors who clone this repo get the Garmin MCP wired up against the local source with no extra config.

This repo ships an opencode.json that runs the MCP via uv run garmin-mcp, so it always tracks the working tree.

git clone https://github.com/Taxuspt/garmin_mcp.git
cd garmin_mcp
uv sync                # install dependencies
garmin-mcp-auth        # one-time Garmin login (skip if ~/.garminconnect already exists)
opencode               # launches with the garmin MCP attached

Verify the server is connected:

opencode mcp list
# ●  ✓ garmin   connected
#       uv run garmin-mcp

From any other directory (GitHub install)

Add the server to your global opencode config at ~/.config/opencode/opencode.json after running garmin-mcp-auth:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "garmin": {
      "type": "local",
      "command": [
        "uvx",
        "--python",
        "3.12",
        "--from",
        "git+https://github.com/Taxuspt/garmin_mcp",
        "garmin-mcp"
      ],
      "enabled": true,
      "timeout": 30000
    }
  }
}

Restart opencode after saving the file. The first uvx invocation downloads and caches the package, so the initial startup may take a few seconds.

With Docker

Docker provides an isolated and consistent environment for running the MCP server.

  1. Create a .env file with your credentials:

echo "GARMIN_EMAIL=your_email@example.com" > .env
echo "GARMIN_PASSWORD=your_password" >> .env
  1. Start the container:

docker compose up -d
  1. View logs to monitor the server:

docker compose logs -f garmin-mcp

Using Docker Directly

# Build the image
docker build -t garmin-mcp .

# Run the container
docker run -it \
  -e GARMIN_EMAIL="your_email@example.com" \
  -e GARMIN_PASSWORD="your_password" \
  -v garmin-tokens:/root/.garminconnect \
  garmin-mcp

Using File-Based Secrets (More Secure)

For enhanced security, especially in production environments, use file-based secrets instead of environment variables:

  1. Create a secrets directory and add your credentials:

mkdir -p secrets
echo "your_email@example.com" > secrets/garmin_email.txt
echo "your_password" > secrets/garmin_password.txt
chmod 600 secrets/*.txt
  1. Edit docker-compose.yml and uncomment the secrets section:

services:
  garmin-mcp:
    environment:
      - GARMIN_EMAIL_FILE=/run/secrets/garmin_email
      - GARMIN_PASSWORD_FILE=/run/secrets/garmin_password
    secrets:
      - garmin_email
      - garmin_password

secrets:
  garmin_email:
    file: ./secrets/garmin_email.txt
  garmin_password:
    file: ./secrets/garmin_password.txt
  1. Start the container:

docker compose up -d

Handling MFA with Docker

If you have multi-factor authentication (MFA) enabled on your Garmin account:

  1. Run the container in interactive mode:

docker compose run --rm garmin-mcp
  1. When prompted, enter your MFA code:

Garmin Connect MFA required. Please check your email/phone for the code.
Enter MFA code: 123456
  1. The OAuth tokens will be saved to the Docker volume (garmin-tokens), so you won't need to re-authenticate on subsequent runs.

  2. After MFA setup, you can run the container normally:

docker compose up -d

Docker Volume Management

The OAuth tokens are stored in a persistent Docker volume to avoid re-authentication:

# List volumes
docker volume ls

# Inspect the tokens volume
docker volume inspect garmin_mcp_garmin-tokens

# Remove the volume (will require re-authentication)
docker volume rm garmin_mcp_garmin-tokens

Using with Claude Desktop via Docker

To use the Dockerized MCP server with Claude Desktop, you can configure it to communicate with the container. However, note that MCP servers typically communicate via stdio, which works best with direct process execution. For Docker-based deployments, consider using the standard uvx method shown in the With Claude Desktop section instead.

Usage Examples

Once connected in Claude, you can ask questions like:

  • "Show me my recent activities"

  • "What was my sleep like last night?"

  • "How many steps did I take yesterday?"

  • "Show me the details of my latest run"

  • "Analyze my last ride's power zones and compare to my training zones"

  • "Show me my CTL, ATL, and TSB trend for the last 6 weeks"

  • "What was my power duration curve from yesterday's ride? Estimate my FTP."

  • "Analyze the FIT data from my last cycling activity — how was my shifting quality on the climbs?"

  • "Show me my HRV trend for the last 2 weeks and flag any recovery concerns"

  • "What's my season best 20-minute power and when did I set it?"

Troubleshooting

"Failed to spawn process: No such file or directory"

If Claude Desktop can't find uvx, it's because uvx is not in the PATH that Claude Desktop uses. To fix this:

  1. Find where uvx is installed:

which uvx
  1. Use the full path in your configuration. For example, if uvx is at /Users/username/.cargo/bin/uvx:

{
  "mcpServers": {
    "garmin": {
      "command": "/Users/username/.cargo/bin/uvx",
      "args": [
        "--python",
        "3.12",
        "--from",
        "git+https://github.com/Taxuspt/garmin_mcp",
        "garmin-mcp"
      ]
    }
  }
}

Login Issues

If you encounter login issues:

  1. Verify your credentials are correct

  2. Check if Garmin Connect requires additional verification

  3. Ensure the garminconnect package is up to date

Logs

For other issues, check the Claude Desktop logs at:

  • macOS: ~/Library/Logs/Claude/mcp-server-garmin.log

  • Windows: %APPDATA%\Claude\logs\mcp-server-garmin.log

Garmin Connect Multi-Factor Authentication (MFA)

Understanding MFA with MCP Servers

MCP servers run as background processes without direct terminal access. If your Garmin account has MFA enabled, you must authenticate once using the pre-authentication tool before the server can run.

The easiest way to handle MFA is using the dedicated authentication tool:

garmin-mcp-auth

This saves OAuth tokens to ~/.garminconnect for future use. The server will automatically use these tokens when running in Claude Desktop or other MCP clients.

Additional Options:

# Use environment variables for credentials
GARMIN_EMAIL=you@example.com GARMIN_PASSWORD=secret garmin-mcp-auth

# Verify existing tokens
garmin-mcp-auth --verify

# Force re-authentication (e.g., when tokens expire)
garmin-mcp-auth --force-reauth

# Use custom token location
garmin-mcp-auth --token-path ~/.garmin_tokens

Alternative: Manual First Run

You can also authenticate by running the server once interactively:

# Store credentials in files for security
echo "your_email@example.com" > ~/.garmin_email
echo "your_password" > ~/.garmin_password
chmod 600 ~/.garmin_email ~/.garmin_password

# Run server interactively to authenticate
GARMIN_EMAIL_FILE=~/.garmin_email GARMIN_PASSWORD_FILE=~/.garmin_password \
  uvx --python 3.12 --from git+https://github.com/Taxuspt/garmin_mcp garmin-mcp

# Enter MFA code when prompted
# Tokens will be saved automatically
# Now add to Claude Desktop config without credentials

After initial authentication, configure Claude Desktop without credentials (tokens are already saved):

{
  "mcpServers": {
    "garmin": {
      "command": "uvx",
      "args": [
        "--python",
        "3.12",
        "--from",
        "git+https://github.com/Taxuspt/garmin_mcp",
        "garmin-mcp"
      ]
    }
  }
}

Using Docker with MFA

If using Docker, follow the Handling MFA with Docker section above for a streamlined experience with persistent token storage.

Troubleshooting MFA

Error: "MFA authentication required but no interactive terminal available"

Solution:

  1. Open terminal

  2. Run: garmin-mcp-auth

  3. Enter credentials and MFA code

  4. Restart Claude Desktop

Token Expired

OAuth tokens expire periodically (approximately every 6 months). Re-authenticate:

garmin-mcp-auth --force-reauth

Verify Tokens Work

garmin-mcp-auth --verify

Testing

This project includes comprehensive tests for all MCP tools. All tests are currently passing (100%).

Running Tests

# Run all integration tests (default - uses mocked Garmin API)
uv run pytest tests/integration/

# Run tests with verbose output
uv run pytest tests/integration/ -v

# Run a specific test module
uv run pytest tests/integration/test_health_wellness_tools.py -v

# Run end-to-end tests (requires real Garmin credentials)
uv run pytest tests/e2e/ -m e2e -v

Test Structure

  • Integration tests (200+ tests): Test all MCP tools using FastMCP integration with mocked Garmin API responses

  • End-to-end tests (4 tests): Test with real MCP server and Garmin API (requires valid credentials)

Reinstalling from local path

If you are working from a local checkout or fork:

uv tool install --python 3.12 --force C:\Users\aresd\Desktop\programacion\garmin_mcp

Available Tools

138 tools
add_body_compositionC

Add body composition data

Args: date: Date in YYYY-MM-DD format weight: Weight in kg percent_fat: Body fat percentage percent_hydration: Hydration percentage visceral_fat_mass: Visceral fat mass bone_mass: Bone mass muscle_mass: Muscle mass basal_met: Basal metabolic rate active_met: Active metabolic rate physique_rating: Physique rating metabolic_age: Metabolic age visceral_fat_rating: Visceral fat rating bmi: Body Mass Index

ParametersJSON Schema
NameRequiredDescriptionDefault
bmiNo
dateYes
weightYes
basal_metNo
bone_massNo
active_metNo
muscle_massNo
percent_fatNo
metabolic_ageNo
physique_ratingNo
percent_hydrationNo
visceral_fat_massNo
visceral_fat_ratingNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior1/5

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

The description omits any details about side effects, such as whether the operation overwrites existing entries, requires prior data, or is idempotent. With no annotations and only a bare action phrase, the agent has no insight into the write behavior or potential consequences.

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

Conciseness4/5

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

The description is concise, consisting of a single action line followed by a parameter list. However, it is not structured as a narrative or front-loaded with a summary; it reads as a bare enumeration, which is efficient but could be more organized.

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

Completeness2/5

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

The description lacks information about the return value or success/failure indications, despite the presence of an output schema. It also does not highlight which parameters are required (date and weight) or any constraints, leaving the agent with incomplete context for invoking the tool correctly.

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

Parameters3/5

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

The description adds moderate value by listing units for some parameters (e.g., weight in kg, percent_fat as percentage), but it does not provide units for all fields (e.g., basal_met) or clarify expected ranges. Given the schema has 0% coverage, this is helpful but incomplete, earning a middle score.

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

Purpose5/5

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

The description clearly states the verb 'Add' and the resource 'body composition data', making the tool's purpose unambiguous. It is also distinct from sibling tools like add_weigh_in and get_body_composition, so an agent can easily identify this as the write operation for body composition metrics.

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

Usage Guidelines1/5

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

No guidance is provided on when to use this tool versus alternatives such as add_weigh_in or get_body_composition. There is no explanation of prerequisites, relationship to other data, or typical use cases, leaving the agent to infer context 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.

add_gear_to_activityB

Associate gear with an activity

Links a specific piece of gear (like shoes, bike, etc.) to an activity.

Args: activity_id: ID of the activity gear_uuid: UUID of the gear to add (get from get_gear)

ParametersJSON Schema
NameRequiredDescriptionDefault
gear_uuidYes
activity_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the high-level association action and does not reveal potential side effects, whether existing gear associations are replaced or appended, error behavior for invalid IDs, or any authorization requirements.

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

Conciseness5/5

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

The description is compact and well-organized, with a clear one-line summary followed by a focused Args section. Every sentence contributes value, and the parameter documentation is front-loaded and easy for an agent to parse quickly.

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

Completeness3/5

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

For a simple two-parameter tool with an output schema present, the description covers the basics of what the tool does and what the parameters mean. However, it omits important behavioral context such as whether the operation is idempotent, what happens if gear is already associated, and whether the activity must exist, making it adequate but not fully complete.

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

Parameters4/5

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

The input schema has 0% description coverage, so the description must compensate, and it largely does. The Args block provides semantic meaning for both parameters: activity_id is 'ID of the activity' and gear_uuid is 'UUID of the gear to add (get from get_gear)', adding useful sourcing context beyond the raw schema types.

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

Purpose4/5

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

The description clearly states a specific verb and resource: 'Associate gear with an activity' and 'Links a specific piece of gear to an activity.' It distinguishes the action from unrelated siblings by defining exactly what is being linked, though it does not explicitly contrast itself with remove_gear_from_activity or get_activity_gear.

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

Usage Guidelines2/5

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

The only usage guidance is the hint that the gear UUID should be obtained from get_gear, which is a helpful prerequisite but not a tool-selection guideline. It does not explain when to choose this tool over remove_gear_from_activity or other gear-related tools, nor does it provide any exclusions or alternative conditions.

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

add_hydration_dataB

Add hydration data

Args: value_in_ml: Amount of liquid in milliliters cdate: Date in YYYY-MM-DD format timestamp: Timestamp in YYYY-MM-DDThh:mm:ss.sss format

ParametersJSON Schema
NameRequiredDescriptionDefault
cdateYes
timestampYes
value_in_mlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It only states 'Add hydration data' without disclosing any side effects (e.g., idempotency, overwrite behavior, required authentication) beyond the basic action.

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

Conciseness5/5

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

The description is extremely concise and free of any unnecessary wording. It includes the essential action and parameter explanations in a compact format.

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

Completeness3/5

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

The description is adequate for a simple mutation, but lacks broader context such as the purpose of the hydration data, expected response format, or error handling. The parameter explanations are useful, but the overall context is minimal.

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

Parameters4/5

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

The description provides meaningful details for all parameters: units for value_in_ml and exact formats for cdate and timestamp. This adds value over the bare schema, which only lists parameter names and types.

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

Purpose4/5

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

The description clearly states the action ('Add hydration data') with a specific verb and object. It distinguished from the sibling 'get_hydration_data' tool, but does not elaborate on the exact resource or context (e.g., logging a new entry).

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives. The existence of a complementary 'get_hydration_data' tool implies usage for adding, but the description does not state this or mention any conditions.

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

add_weigh_inC

Add a new weight measurement

Args: weight: Weight value unit_key: Unit of weight ('kg' or 'lb')

ParametersJSON Schema
NameRequiredDescriptionDefault
weightYes
unit_keyNokg

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the mutation intent ('Add') and explains arguments, but says nothing about what timestamp is assigned, whether an existing weigh-in for the same date is overwritten or duplicated, whether a valid weight range applies, or what happens on success. This is a thin behavioral profile for a write operation.

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

Conciseness4/5

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

The description is short and front-loaded with the core action in the first sentence. The Args block is cleanly structured and every line earns its place. It is efficient without being cryptic.

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

Completeness3/5

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

For a simple flat 2-parameter tool with an output schema, the description covers the basics. The main completeness gap is the ambiguity relative to add_weigh_in_with_timestamps — an agent cannot determine which sibling fits its goal. Also missing is any note on timestamp/duplicate semantics, which matters for a health-data write.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate, and it partially does: unit_key is usefully explained as 'kg' or 'lb', which the bare schema (no enum) does not provide. However, 'weight: Weight value' is nearly tautological and adds little beyond the property name and type. The description is adequate but not a strong compensation for the missing schema descriptions.

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

Purpose4/5

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

The description states a specific verb and resource: 'Add a new weight measurement.' This is clear and unambiguous. However, it does not differentiate itself from the closely related sibling add_weigh_in_with_timestamps, which presumably does the same thing plus timestamp handling, so an agent cannot tell them apart from this text alone.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives. With add_weigh_in_with_timestamps, delete_weigh_ins, get_weigh_ins, and get_daily_weigh_ins in the sibling list, the description gives no hint about the distinguishing condition (e.g., when to add with a default/current timestamp vs. specifying timestamps).

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

add_weigh_in_with_timestampsC

Add a new weight measurement with specific timestamps

Args: weight: Weight value unit_key: Unit of weight ('kg' or 'lb') date_timestamp: Local timestamp in format YYYY-MM-DDThh:mm:ss gmt_timestamp: GMT timestamp in format YYYY-MM-DDThh:mm:ss

ParametersJSON Schema
NameRequiredDescriptionDefault
weightYes
unit_keyNokg
gmt_timestampNo
date_timestampNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.5/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of explaining side effects. It only states 'Add' without disclosing whether this creates a new record, updates an existing one, requires authentication, returns the created entity, or has any other implications. The behavior is implicitly a creation, but no explicit transparency about side effects is provided.

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

Conciseness3/5

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

The description is concise and straightforward, with a clear structure: a one-line summary followed by parameter listings. However, it is minimal to the point of being terse, lacking any additional explanatory content. It is not verbose, but it does not fully exploit the space to add value.

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

Completeness2/5

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

The description fails to provide broader context. It does not explain what 'specific timestamps' refers to, how they differ from the default behavior, whether both timestamps are required, or what the output of the operation will be. No output schema is described. Given the presence of a similar sibling tool, the lack of differentiation or additional context makes this incomplete for an unfamiliar user.

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

Parameters1/5

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

The parameter descriptions are purely redundant: 'Weight value', 'Unit of weight', 'Local timestamp', 'GMT timestamp'. They add no meaning beyond the parameter names themselves. The schema already provides names and types, and the description fails to clarify units, formats, constraints, or relationships between parameters. Schema coverage is 0% and the description compensates nothing.

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

Purpose5/5

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

The description clearly states the operation: 'Add a new weight measurement with specific timestamps'. It specifies the verb (add), the resource (weight measurement), and the distinguishing feature (timestamps). This distinguishes it from the sibling 'add_weigh_in' which presumably lacks timestamp support.

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

Usage Guidelines1/5

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

No guidance is given about when to use this tool versus the alternative 'add_weigh_in'. The description does not mention scenarios, prerequisites, or conditions that would make this tool preferable. The usage context is entirely absent.

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

count_activitiesA

Get total count of activities in the user's Garmin account

Returns the total number of activities recorded.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It accurately portrays a read-only operation via 'Get' and 'Returns', and does not claim any side effects. However, it does not explicitly disclose that it does not modify data or mention error conditions, though these are largely implied by the verb.

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

Conciseness5/5

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

The description is exceptionally concise, consisting of two short sentences that convey the purpose and output without any redundant or extraneous information. The structure is clean and front-loaded.

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

Completeness5/5

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

Given the tool's simplicity (no parameters, no annotations, no explicit output schema), the description fully explains what the tool does and what it returns. Agents can invoke it correctly without needing additional context.

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

Parameters3/5

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

The tool has no parameters, so schema coverage is effectively 100%. The description adds no parameter-specific information, but none is needed. The baseline score of 3 applies because the schema fully covers the (empty) parameter space.

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

Purpose5/5

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

The description clearly states the tool's purpose with a specific verb ('Get') and resource ('total count of activities'), and implicitly distinguishes it from get_activities by focusing on the count instead of the list. The two sentences are concise and unambiguous.

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

Usage Guidelines2/5

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

The description implies the primary use case (obtaining a count) but does not explicitly state when to prefer this over get_activities or mention any alternative. No guidance on when not to use it is provided, leaving the decision to the agent.

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

create_custom_foodA

Create a custom food in the user's Garmin nutrition library

Creates a new food item with nutritional information per serving. On success the response includes foodId and servingId needed for log_custom_food. If the API returns no data (204), use get_custom_foods(search=food_name) to retrieve those IDs.

All nutrient amounts are ABSOLUTE values per serving, not %DV. Nutrition labels often print %DV for calcium/iron/vitamin D — convert to absolute units before passing.

Args: food_name: Name of the custom food (e.g. "Homemade Chocolate Cookies") calories: Calories per serving serving_unit: Unit for serving size (e.g. "G", "ML", "OZ"). Default "G" number_of_units: Serving size in the specified unit. Default 100 brand_name: Brand or vendor name (e.g. "Three Bridges") carbs: Carbohydrates in grams per serving protein: Protein in grams per serving fat: Total fat in grams per serving fiber: Fiber in grams per serving sugar: Sugar in grams per serving saturated_fat: Saturated fat in grams per serving sodium: Sodium in mg per serving cholesterol: Cholesterol in mg per serving potassium: Potassium in mg per serving trans_fat: Trans fat in grams per serving calcium: Calcium in mg per serving (NOT %DV) iron: Iron in mg per serving (NOT %DV) vitamin_d: Vitamin D in mcg per serving (NOT %DV)

ParametersJSON Schema
NameRequiredDescriptionDefault
fatNo
ironNo
carbsNo
fiberNo
sugarNo
sodiumNo
calciumNo
proteinNo
caloriesYes
food_nameYes
potassiumNo
trans_fatNo
vitamin_dNo
brand_nameNo
cholesterolNo
serving_unitNoG
saturated_fatNo
number_of_unitsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the success response (foodId and servingId) and the 204 fallback, but does not mention potential errors, authentication, or other side effects beyond creation. This is adequate but not fully transparent.

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

Conciseness4/5

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

The description is well-structured with an intro, behavioral notes, and an Args list. It is slightly long but every sentence adds value, including the fallback and unit conversion reminders. No redundant or filler content.

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

Completeness4/5

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

Given the schema covers all parameters and an output schema exists (per context), the description adds necessary context about the response and fallback. It tells the agent what to do with the output (use IDs for logging) and how to handle a 204. Missing minor details like uniqueness constraints, but overall complete.

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

Parameters5/5

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

The schema has no descriptions, but the Args section in the description adds meaningful detail to every parameter, including units (mg, g, mcg) and clarifications like 'NOT %DV' for micronutrients. It also specifies allowed examples for serving_unit and defaults. This fully compensates for the schema's lack of descriptions.

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

Purpose5/5

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

The description clearly states the specific verb 'Create' and the resource 'custom food in the user's Garmin nutrition library'. It also differentiates from siblings by noting that the returned foodId and servingId are needed for log_custom_food, making the purpose unambiguous.

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

Usage Guidelines4/5

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

The description provides actionable guidance: it explains the fallback to get_custom_foods when a 204 is returned, and instructs converting %DV values to absolute units. While it does not explicitly say when to use this vs update or delete, the purpose is clear and these guidelines are helpful.

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

create_manual_activityA

Log a manual activity in Garmin Connect — useful for activities done without a watch.

The type_key must match a Garmin activity type. Use get_activity_types to see the full list. Common values: yoga, strength_training, meditation, indoor_cycling, pilates, bouldering, fitness_equipment.

Args: type_key: Activity type key (e.g. "yoga", "strength_training") date: Date of the activity in YYYY-MM-DD format duration_minutes: Duration of the activity in minutes start_time: Start time as HH:MM (24-hour, default 09:00) activity_name: Optional title; defaults to the type_key if not provided distance_km: Distance in kilometres (default 0.0 for non-distance activities) time_zone: IANA time zone for the activity (default UTC)

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
type_keyYes
time_zoneNoUTC
start_timeNo09:00
distance_kmNo
activity_nameNo
duration_minutesYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It only says 'Log' and lists input constraints; it does not mention side effects, permissions, reversibility, validation failures, or whether it overwrites anything. For a write operation this is a significant gap.

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

Conciseness4/5

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

The description is front-loaded with the purpose, followed by a useful type_key note and a compact Args list. It repeats a few defaults already in the schema, but the extra format details earn their place. No filler or fluff.

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

Completeness4/5

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

For a 7-parameter write tool with no annotations, the description covers the parameter space well and directs agents to the right reference for valid type_key values. It avoids explaining return values because an output schema exists. Missing error-handling details, but the essentials are present.

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

Parameters5/5

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

Schema description coverage is 0%, but the description compensates thoroughly: it documents every parameter with formats (YYYY-MM-DD, HH:MM), defaults (09:00, UTC, 0.0, default to type_key), and a meaningful controlled vocabulary for type_key, including a pointer to get_activity_types. This adds exactly the meaning the schema lacks.

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

Purpose5/5

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

States a specific verb and resource: 'Log a manual activity in Garmin Connect'. The phrase 'manual activity' and 'without a watch' distinguishes it from workout-creation and upload tools like create_strength_workout or upload_workout. Clear intent, no ambiguity.

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

Usage Guidelines4/5

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

Explicitly gives the primary use case ('useful for activities done without a watch') and instructs the agent to use get_activity_types for valid type_key values. It does not explicitly name alternatives or exclusions, but the context is sufficient for tool routing.

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

create_run_workoutA

Create a continuous run workout and upload it to Garmin Connect.

Builds a single uninterrupted run interval with warmup and cooldown walks.

Targets a named Garmin heart-rate zone by default. Named zones (Z1-Z5) don't line up with every real training target -- e.g. a 136-148 bpm Zone 2 goal straddles Garmin's Z2 (118-137) and Z3 (138-157). Pass hr_min and hr_max together to target that exact bpm range instead; the watch will then show "in range" only for the range you actually want, not a whole zone that over- or under-shoots it.

Args: name: Workout name (e.g. "Step 8 - 30min continuous") run_seconds: Duration of the run in seconds warmup_min: Warmup walk duration in minutes cooldown_min: Cooldown walk duration in minutes hr_zone: Target heart-rate zone (Z1-Z5, default Z3). Ignored if hr_min/hr_max are given. hr_min: Optional custom target heart rate range, minimum bpm (must be given with hr_max) hr_max: Optional custom target heart rate range, maximum bpm (must be given with hr_min)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
hr_maxNo
hr_minNo
hr_zoneNoZ3
warmup_minYes
run_secondsYes
cooldown_minYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of transparency. It discloses the primary side effect (uploading to Garmin Connect) and the behavior of heart rate targeting with both named zones and custom ranges. It does not mention failure modes or reversibility, but for a creation operation this level of transparency is reasonably complete.

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

Conciseness4/5

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

The description is well-structured with a headline, an explanatory paragraph, and a parameter list. The heart rate zone example is detailed and valuable but adds a bit of length; overall, it is concise and every sentence serves a purpose without fluff.

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

Completeness4/5

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

Given the tool's complexity and the existing output schema (though not displayed), the description adequately covers the input semantics and the primary action. It does not discuss return values, but since an output schema is indicated, that is acceptable. No prerequisites or error conditions are mentioned, but they are not essential for this creation operation.

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

Parameters5/5

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

The description explicitly explains every parameter in a bulleted list, including the nuanced behavior of hr_min and hr_max (must be given together, overrides hr_zone) and the default value of hr_zone. This adds substantial meaning beyond the raw schema, which only lists types and defaults, ensuring the agent understands exactly how to supply each argument.

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

Purpose4/5

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

The description clearly states the tool creates a continuous run workout and uploads it to Garmin Connect, with a detailed explanation of a single uninterrupted run interval. It does not explicitly contrast with sibling workout creation tools like create_walk_run_workout or create_strength_workout, but the 'continuous run' phrasing and the example parameter values make the purpose unambiguous.

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

Usage Guidelines3/5

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

The description provides clear guidance on when to use hr_zone versus hr_min/hr_max, explaining the pitfall of named zones and the requirement to pass both min and max together. However, it does not explicitly state when to choose this tool over alternative workout creation sibling tools, leaving some ambiguity about the broader selection criteria.

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

create_strength_workoutA

Create a strength workout and upload it to Garmin Connect.

Each exercise becomes a reps-based step. The name is kept in the step description; it is also sent as exerciseName, which Garmin only retains when it matches one of its own exercise keys (e.g. "FARMERS_CARRY").

Args: name: Workout name exercises: List of dicts with keys: name, sets, reps, rest_seconds and an optional category. Category is omitted from the payload when not given; Garmin accepts that. When given it must be one of Garmin's exercise categories (e.g. SQUAT, DEADLIFT, PUSH_UP, CARRY, SLED) — anything else, including "UNASSIGNED" and "OTHER", is rejected with 400 Invalid category. Full list: https://connect.garmin.com/web-data/exercises/Exercises.json

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
exercisesYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral disclosure burden. It covers the create+upload side effect, the conversion of exercises to reps-based steps, how exerciseName is only retained when it matches Garmin's keys, and that invalid categories cause a 400 rejection. It also links to the authoritative category list, which is a strong transparency signal.

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

Conciseness5/5

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

The purpose is front-loaded in the first sentence, followed by concise behavioral details and an Args block. Every sentence adds necessary information, and the long allowed-category list is linked rather than inlined. The length is justified by the number of constraints the agent must handle.

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

Completeness5/5

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

For a 2-parameter tool with no annotations and a sparse schema, the description is the only guide to correct invocation. It fully specifies the payload shape, category validation, and Garmin's exerciseName behavior. The presence of an output schema means return values need no description, and nothing critical appears missing.

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

Parameters5/5

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

Schema coverage is 0% and the schema only defines 'name' and an opaque 'exercises' array. The description compensates fully by specifying the required dict keys (name, sets, reps, rest_seconds, optional category), explaining category omission and allowed values, and documenting the failure mode. This adds essential meaning beyond the raw schema.

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

Purpose5/5

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

The description states a specific verb and resource ('Create a strength workout') and immediately adds the distinctive behavior 'upload it to Garmin Connect' plus 'Each exercise becomes a reps-based step.' This clearly differentiates it from siblings like create_run_workout or create_walk_run_workout, even without naming them.

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

Usage Guidelines2/5

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

The description provides detailed parameter constraints but never tells an agent when to prefer this tool over closely related siblings such as create_run_workout, create_walk_run_workout, or upload_workout. No alternatives or exclusions are mentioned, so an agent must infer tool selection entirely from the name.

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

create_walk_run_workoutA

Create a walk/run interval workout and upload it to Garmin Connect.

Builds the internal Garmin JSON automatically and returns the new workout ID.

Args: name: Workout name (e.g. "W3 Mié 2:2") run_seconds: Duration of each run interval in seconds walk_seconds: Duration of each walk/recovery interval in seconds repeats: Number of run/walk repetitions warmup_min: Warmup duration in minutes cooldown_min: Cooldown duration in minutes hr_zone: Target heart-rate zone (Z1-Z5, default Z3)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
hr_zoneNoZ3
repeatsYes
warmup_minYes
run_secondsYes
cooldown_minYes
walk_secondsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden of disclosing behavior. It clearly states that the tool uploads to Garmin Connect and returns a new workout ID, which are the primary side effects and return value. It does not mention potential failure modes or authorization requirements, but the main behavioral traits are transparent.

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

Conciseness4/5

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

The description is concise, consisting of two sentences that convey the purpose and key outputs, followed by a parameter list that adds necessary semantics. No redundant or filler content is present. The structure is clear and easy to scan.

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

Completeness4/5

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

Given the tool's moderate complexity (7 parameters) and the existence of a return value (workout ID), the description covers the essential purpose and parameters. It does not describe the output schema, but the returned ID is sufficient for many use cases. It lacks details on error handling or prerequisites, but within the context of sibling tools, it is reasonably complete.

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

Parameters4/5

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

The schema provides only titles and types with zero descriptions, so the parameter explanations in the description are essential. Each parameter is given a brief semantic definition (e.g., 'Duration of each run interval in seconds', 'Target heart-rate zone (Z1-Z5, default Z3)'), covering all seven parameters. It lacks constraints like minimum values or exact allowed enum values for hr_zone, but the core meaning is clear.

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

Purpose5/5

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

The description clearly states the verb 'Create' and the resource 'walk/run interval workout', and specifies that it uploads to Garmin Connect. The mention of 'walk/run interval' distinguishes it from sibling tools like create_run_workout and create_z2_walk_workout, making the purpose unambiguous.

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

Usage Guidelines2/5

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

The description does not provide any explicit guidance on when to use this tool versus the alternative creation tools (e.g., create_run_workout, create_z2_walk_workout) or upload tools. There is no mention of 'use this when...' or 'not for...', leaving the selection criteria implicit.

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

create_z2_walk_workoutA

Create a steady Z2 walking workout and upload it to Garmin Connect.

Args: name: Workout name duration_min: Main walking block duration in minutes hr_min: Minimum heart rate in bpm (used for description; target is Z2) hr_max: Maximum heart rate in bpm (used for description; target is Z2)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
hr_maxYes
hr_minYes
duration_minYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose the key external side effect: upload to Garmin Connect. It also clarifies that hr_min and hr_max are used only for the description rather than setting the target, which prevents an incorrect assumption. However, it does not address duplicate names, overwrite behavior, or required permissions.

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

Conciseness5/5

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

The description is two compact sections: a front-loaded purpose statement followed by a terse argument list. Every sentence contributes information, with no filler or repetition of the schema titles.

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

Completeness4/5

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

The description covers the operation, all required parameters, and the key side effect, and an output schema exists so return values need not be specified. It is only slightly incomplete in not addressing when to prefer this over sibling workout-creation or upload tools and in not documenting edge cases such as duplicate workout names.

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

Parameters4/5

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

Schema description coverage is 0%, so the parameter semantics fall entirely on the description, and the description documents all four required arguments with units and purpose. It usefully explains that hr_min and hr_max are descriptive only while the target is Z2, adding meaning the schema does not provide.

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

Purpose5/5

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

The description states a specific verb and resource: create a steady Z2 walking workout and upload it to Garmin Connect. The Z2 walking scope differentiates it from sibling tools like create_run_workout, create_strength_workout, and the more generic create_walk_run_workout.

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

Usage Guidelines3/5

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

The use case (steady Z2 walking workout plus upload) is implied by the first sentence, but there is no explicit when-to-use guidance or exclusions. An agent is not told when to choose this tool over upload_workout, create_walk_run_workout, or create_run_workout.

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

delete_courseA

Delete a course from Garmin Connect.

Args: course_id: ID of the course to delete (get IDs from get_courses).

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

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

The description carries the full behavioral burden because no annotations are provided. It identifies the action as destructive, but does not disclose whether the deletion is permanent or irreversible, what dependent data may be affected, whether authorization is required, or how invalid IDs are handled. For a destructive tool with zero annotation coverage, this is a significant gap.

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

Conciseness5/5

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

The description is very compact and well-structured: the first sentence states the operation, and the second line defines the sole parameter and how to source it. Every sentence earns its place; there is no redundancy or filler.

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

Completeness4/5

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

For a single-parameter destructive tool with an output schema present, the description supplies the essential call information: what to delete and how to get a valid ID. It lacks explicit irreversibility or edge-case caveats, but the overall operation is simple and the output schema covers return shape.

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

Parameters4/5

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

Schema description coverage is 0%, and the description meaningfully compensates by explaining that `course_id` is the ID of the course to delete and by directing the agent to `get_courses` as the reliable source of valid IDs. This adds real value beyond the bare integer field.

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

Purpose5/5

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

The description opens with a specific verb-resource pair ('Delete a course') and identifies the exact domain ('Garmin Connect'), making the intended tool unambiguous even among siblings like `delete_workout`, `delete_weigh_ins`, and `upload_course`. No other plausible interpretation exists.

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

Usage Guidelines3/5

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

It gives a genuine usage hint by telling the agent to obtain course IDs from `get_courses`, which is a useful prerequisite. However, it does not explicitly say when to use this tool versus alternatives or state any exclusions. The usage context remains mostly implied rather than explicitly spelled out.

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

delete_custom_foodA

Delete a custom food from the user's Garmin nutrition library

Permanently removes a custom food entry. The food must not be actively referenced in a logged meal to be deleted. Use get_custom_foods to find the foodId.

Args: food_id: ID of the custom food to delete — a 32-char hex string (from get_custom_foods or create_custom_food)

ParametersJSON Schema
NameRequiredDescriptionDefault
food_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations present, the description carries the burden. It discloses the permanent nature of the deletion and the requirement that the food not be in active use, which are important behavioral traits. It does not cover error handling or side effects, but the essential behaviors are clearly stated.

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

Conciseness5/5

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

The description is concise, starting with the purpose, then a brief note on constraints, and finally a clear Args section. No redundant information or filler; every sentence contributes to understanding the tool's use.

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

Completeness4/5

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

Given the output schema exists, the description need not explain return values. It includes the essential context: action, resource, ID sourcing, and a critical precondition. It lacks explicit error scenarios but remains sufficient for correct invocation.

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

Parameters5/5

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

The single parameter food_id is fully described: it identifies the custom food to delete, is a 32-char hex string, and can be obtained from get_custom_foods or create_custom_food. This adds substantial meaning beyond the schema's bare type definition.

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

Purpose5/5

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

Clearly states it deletes a custom food from the user's Garmin nutrition library, using the verb 'delete' and specifying the resource (custom food). It also adds the key detail that deletion is permanent, fully covering the action's intent.

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

Usage Guidelines4/5

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

Provides explicit guidance to use get_custom_foods to find the foodId, and mentions the precondition that the food must not be actively referenced in a logged meal. This gives clear context on when and how to use the tool, though it doesn't mention alternative tools for non-deletion operations.

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

delete_food_logA

Delete a food log entry

Permanently removes a logged food item from the nutrition log. Works for both QUICK_ADD and REGULAR_LOG entry types. Use get_nutrition_daily_food_log to find the logId and date.

Args: log_id: Log entry ID to delete — a 32-char hex UUID (from get_nutrition_daily_food_log) meal_date: Date of the log entry in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
log_idYes
meal_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

The description explicitly says 'Permanently removes', disclosing the destructive and irreversible nature. It also clarifies that it works for both QUICK_ADD and REGULAR_LOG entry types. Since no annotations are provided, the description carries the full burden and does it well.

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

Conciseness5/5

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

Three concise sentences plus a compact Args list. The description is free of fluff and delivers the essential information in a well-organized structure, making it easy for an agent to parse.

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

Completeness4/5

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

Covers the core action, parameter sourcing, and format. It doesn't mention error handling or return values, but for a delete operation the description provides enough context for an agent to invoke it correctly. The absence of an output schema in the prompt reduces the need for return details.

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

Parameters4/5

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

The input schema has no descriptions (0% coverage). The tool description compensates by explaining log_id as the entry ID from get_nutrition_daily_food_log, and meal_date in YYYY-MM-DD format. It also specifies log_id is a 32-char hex UUID. This adds meaningful detail beyond the raw schema.

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

Purpose5/5

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

States exactly what it does: delete a food log entry. The verb 'Delete' and resource 'food log entry' are specific, and it distinguishes from siblings like delete_weigh_ins or delete_course by targeting the nutrition log.

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

Usage Guidelines4/5

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

Provides a clear prerequisite: 'Use get_nutrition_daily_food_log to find the logId and date.' This tells the agent how to obtain the required parameters. It doesn't explicitly say when not to use this tool, but the guidance is actionable and sufficient for a delete operation.

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

delete_weigh_insB

Delete weight measurements for a specific date

Args: date: Date in YYYY-MM-DD format delete_all: Whether to delete all measurements for the day

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
delete_allNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are present, so the description carries the burden. It states the destructive action, but does not disclose whether deletion is permanent, what happens if delete_all is false, or any return/error behavior.

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

Conciseness5/5

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

Short, direct, front-loaded with the action and argument list; no unnecessary words.

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

Completeness2/5

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

The tool lacks output description and leaves delete_all false ambiguous; for a destructive operation, more context is needed to be complete.

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

Parameters3/5

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

It adds date format and describes delete_all as controlling whether all measurements for the day are deleted. It does not explain the false behavior or default, and there are no property-level descriptions in the schema.

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

Purpose5/5

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

Clearly identifies the action (delete), the target (weight measurements), and the scope (specific date). It is distinct from sibling add/get weigh-in tools.

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

Usage Guidelines3/5

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

The purpose statement implies the use case: call this when deleting weight measurements for a date. It does not explicitly mention alternatives 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.

delete_workoutA

Delete a workout from Garmin Connect

Permanently removes a workout from your Garmin Connect workout library.

Args: workout_id: ID of the workout to delete (get IDs from get_workouts)

ParametersJSON Schema
NameRequiredDescriptionDefault
workout_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It explicitly discloses that deletion is permanent, which is the critical behavioral warning for a destructive operation. It does not mention side effects on scheduled workouts, but the permanence statement is valuable and non-obvious.

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

Conciseness5/5

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

The description is compact and front-loaded: the main action, the permanent effect, and the only parameter are stated in three short sections. There is no filler or redundant information.

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

Completeness3/5

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

For a single-parameter tool, the description is mostly adequate for invoking it correctly. However, it omits important context about the sibling delete_workouts, whether deleting also unschedules workouts, and any authorization requirements. The output schema presence makes missing return-value details acceptable.

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

Parameters4/5

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

The schema only defines workout_id as an integer with 0% description coverage. The description compensates by explaining the parameter's role and pointing to get_workouts as the source of valid IDs, which is actionable guidance beyond the schema field name.

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

Purpose4/5

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

Clearly identifies the action as deleting a single workout from Garmin Connect and emphasizes that the removal is permanent. It does not explicitly contrast with the sibling delete_workouts, but the singular wording and single workout_id make the scope reasonably clear.

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

Usage Guidelines3/5

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

Provides a useful prerequisite by directing the agent to get IDs from get_workouts. However, it does not mention when to prefer this tool over delete_workouts or unschedule_workout, nor does it explain scenarios where deletion may be inappropriate.

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

delete_workoutsA

Delete multiple workouts from Garmin Connect in a single call

Permanently removes multiple workouts from your Garmin Connect workout library.

Args: workout_ids: List of workout IDs to delete (get IDs from get_workouts)

ParametersJSON Schema
NameRequiredDescriptionDefault
workout_idsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the burden of behavioral disclosure. It clearly labels the operation as permanent removal, which is essential for a destructive tool, and notes the batch nature of the call. It does not discuss failure behavior or permissions, but the core destructive consequence is disclosed.

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

Conciseness5/5

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

The description is front-loaded with the key purpose, then adds the permanence warning and a compact Args explanation. No extraneous content.

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

Completeness4/5

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

For a simple one-parameter deletion tool, the description plus schema covers the action, the permanent effect, and the ID source. An output schema exists, so return-value details are not required. It could still mention the singular delete_workout alternative or what happens with invalid IDs, but nothing critical is missing.

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

Parameters5/5

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

Schema coverage is 0%, so the description compensates by explaining that workout_ids is a list of workout IDs and pointing to get_workouts as the source. This is sufficient for the only parameter.

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

Purpose5/5

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

The description states a specific action and resource: deleting multiple workouts from Garmin Connect and permanently removing them from the workout library. The word 'multiple' and 'single call' distinguish it from the sibling delete_workout, which appears to handle a single workout.

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

Usage Guidelines4/5

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

The description makes clear this is for deleting multiple workout IDs at once and tells the agent to obtain IDs from get_workouts. It does not explicitly mention when to use the singular delete_workout instead, so there is a small exclusion gap.

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

download_activity_fileA

Download an activity and save it to disk as a file.

Saves the activity in the requested format. Defaults to the original .fit file; Garmin also supports gpx, tcx, and csv.

Directory resolution (first match wins):

  1. output_dir argument (one-off; not persisted)

  2. GARMIN_FIT_DOWNLOAD_DIR environment variable

  3. persisted config (set via set_fit_download_dir) If none is configured, returns status "needs_setup" with a suggested default (the server's current working directory). In that case, ask the user where to save, call set_fit_download_dir(path), then call this tool again.

Files are named "{activity_id}.{ext}" and overwrite any existing file.

Args: activity_id: Garmin activity ID format: One of fit, gpx, tcx, csv (default fit) output_dir: Optional one-off directory override (not persisted)

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNofit
output_dirNo
activity_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

No annotations are provided, but the description fully discloses behavioral details: it saves a file to disk, overwrites existing files, supports a one-off output directory override that is not persisted, and returns a needs_setup status when no directory is configured.

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

Conciseness4/5

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

The description is well-structured and front-loaded, but the directory resolution and needs_setup behavior are described twice in nearly identical terms, adding minor redundancy.

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

Completeness4/5

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

The description covers the key operational context and user prompting flow, but it does not describe the actual return value on success or the response schema, leaving some ambiguity about what the caller receives.

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

Parameters5/5

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

Although the schema description coverage is 0%, the prose explains all three parameters: activity_id is the Garmin activity ID, format has default 'fit' and supported values, and output_dir is an optional non-persisted override.

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

Purpose5/5

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

The description clearly states the tool downloads an activity and saves it to disk as a file. It identifies the resource (activity), the action (download/save), and the output (file), which differentiates it from related tools like download_course_gpx and download_workout.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use the tool: it explains supported formats (fit, gpx, tcx, csv), the directory resolution precedence, and the fallback needs_setup behavior with instructions to ask the user and call set_fit_download_dir.

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

download_workoutA

Download a workout as a FIT file

Downloads the workout in FIT format. The binary data cannot be returned directly through the MCP interface, but this confirms the workout is available.

Args: workout_id: ID of the workout to download

ParametersJSON Schema
NameRequiredDescriptionDefault
workout_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the burden of explaining behavior. It discloses that binary data is not returned directly but confirms availability, which is a meaningful behavioral trait. However, it does not mention permissions, side effects, or any other behavioral details.

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

Conciseness5/5

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

The description is concise and front-loaded with the primary purpose. It uses a clear first line followed by a brief elaboration and an explicit Args section, making it easy to scan and understand.

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

Completeness4/5

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

The tool is simple, and the description covers the core action and an important limitation. While it does not specify the exact return value, the statement 'confirms the workout is available' implies a confirmation response, which is sufficient for this simple tool.

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

Parameters3/5

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

The schema provides only the parameter name and type (integer) with no description. The description adds the explanation 'ID of the workout to download', which clarifies the parameter's purpose but provides no additional detail about constraints, format, or default behavior.

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

Purpose5/5

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

The description clearly states the tool downloads a workout as a FIT file, naming the resource (workout) and action (download). It is distinct from sibling tools like download_course_gpx and download_activity_file, which target different resources.

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

Usage Guidelines2/5

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

The description does not indicate when to use this tool versus alternatives such as download_activity_file or upload_workout. It mentions a limitation (binary data cannot be returned) but offers no explicit guidance on selection criteria or preconditions.

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

get_activitiesA

Get activities with pagination support.

Retrieves a paginated list of activities ordered newest-first. Use this for browsing through large activity lists when you do not need to filter by date range, or as a complement to get_activities_by_date.

Each activity includes an event_type field. Common values: "race", "training", "uncategorized" (no event type set by the user — common for Peloton imports and untagged runs). Filter for races with event_type == "race" rather than excluding "training", as many non-race activities appear as "uncategorized" rather than "training".

Args: start: Starting index (default 0) limit: Maximum number of activities to return (default 20, max 100)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
startNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Because no annotations are provided, the description carries the full burden, and it delivers: pagination behavior, newest-first ordering, event_type semantics, common values, and the important caveat about 'uncategorized' activities and Peloton imports. This goes well beyond the minimal 'retrieves a list' statement.

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

Conciseness4/5

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

The description is well-structured and front-loaded, with purposeful paragraphs for purpose, usage, and parameter details. It is slightly redundant because the opening sentence and the second sentence both convey pagination support, but the overall length is justified by the valuable event_type guidance.

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

Completeness5/5

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

Given the output schema exists, the description doesn't need to spell out return fields—it covers the important contextual points: pagination defaults, ordering, event_type filtering, and relationship to the date-filtered sibling. An agent has everything needed to call this correctly.

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

Parameters5/5

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

Schema description coverage is 0%, but the description fully compensates with an Args section: start is the starting index with default 0, limit is max activities with default20 and max100. This is exactly the meaning an agent needs beyond the bare integer types.

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

Purpose5/5

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

The description names a specific verb and resource ('Get activities'), and adds critical distinguishing detail: paginated list, ordered newest-first. It also explicitly contrasts itself with get_activities_by_date, so an agent can select it without opening schemas.

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

Usage Guidelines5/5

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

It tells the agent exactly when to use the tool: 'when you do not need to filter by date range' or as a complement to get_activities_by_date. It also gives concrete filtering guidance for event_type, which is rare and highly actionable.

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

get_activities_by_dateA

Get activities between specified dates with pagination support.

For accounts with large activity histories, broad date ranges can return thousands of activities in a single response. Use page and page_size to retrieve activities in manageable chunks and avoid "result too large" errors. Activities are ordered newest-first.

Pagination: when has_more is true the response includes next_page — pass that value as page on the next call to retrieve the following page. Repeat until has_more is false.

Note: total_count for a date range is not available from the Garmin API without fetching all results. Use has_more / next_page to walk pages.

Each activity includes an event_type field with values such as:

  • "race" — explicitly tagged as a race by the user

  • "training" — explicitly tagged as a training activity

  • "uncategorized" — no event type set; common for Peloton imports and untagged outdoor runs. Distinct from "training": filter for races with event_type == "race" rather than excluding "training", since many non-race activities appear as "uncategorized" not "training"

  • field absent — API returned no eventType for this activity; not observed in practice in any activity back to 2012 (oldest activities sampled on this account)

Args: start_date: Start date in YYYY-MM-DD format end_date: End date in YYYY-MM-DD format activity_type: Optional activity type filter (e.g., cycling, running, swimming) page: Zero-based page number (default 0) page_size: Number of activities per page, max 200 (default 100)

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
end_dateYes
page_sizeNo
start_dateYes
activity_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

No annotations are present, so the description carries the full behavioral burden. It clearly discloses newest-first ordering, the pagination contract, the total_count API limitation, and nuanced event_type semantics including the absent-field edge case.

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

Conciseness5/5

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

The description is substantial but every paragraph adds necessary operational detail: pagination behavior, API constraints, event_type filtering guidance, and parameter formats. It is front-loaded with a clear purpose before caveats.

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

Completeness5/5

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

For a 5-parameter tool with no annotations, the description covers invocation details, pagination mechanics, filtering semantics, and known API limitations. The output schema handles return-value documentation, so nothing essential is missing.

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

Parameters5/5

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

Schema description coverage is 0%, and the description fully compensates. It documents date format for start_date/end_date, examples for activity_type, zero-based indexing for page, and the max/default for page_size. Every parameter receives actionable meaning.

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

Purpose5/5

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

Description states a specific operation: 'Get activities between specified dates,' with pagination support. The verb, resource, and date-range scope are clear, distinguishing it from sibling tools like get_activity or count_activities.

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

Usage Guidelines4/5

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

Provides strong practical guidance: explains when pagination is needed, how to walk pages with has_more/next_page, and how to interpret event_type for filtering. However, it never explicitly contrasts this tool with sibling alternatives or states when to prefer another tool.

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

get_activities_fordateA

Get activities for a specific date

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the operation is a read ('Get') but does not describe the return shape, pagination, date inclusivity, or any other runtime behavior. This is a minimal disclosure for a tool with zero annotation support.

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

Conciseness5/5

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

The description is short, front-loaded with the core purpose, and includes a clean Args block for the parameter. Every element earns its place without redundancy.

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

Completeness4/5

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

For a simple one-parameter getter with an output schema present, the description provides enough to invoke the tool correctly: the operation, the resource, and the date format. It lacks sibling differentiation and behavioral detail, but the low complexity and output schema reduce the burden.

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

Parameters4/5

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

Schema description coverage is 0%, but the description compensates by specifying the exact date format (YYYY-MM-DD), which is the key semantic information for the single required parameter. It adds meaning beyond the schema's bare 'Date' title.

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

Purpose4/5

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

The description clearly states a specific verb ('Get') and resource ('activities') scoped to a date. However, it does not differentiate from the sibling tool get_activities_by_date, which appears to serve a nearly identical purpose.

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

Usage Guidelines3/5

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

The phrase 'for a specific date' implies this tool is for date-scoped activity retrieval, but there is no explicit guidance on when to choose this over get_activities, get_activities_by_date, or count_activities. Usage context is implied rather than stated.

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

get_activityA

Get detailed information for a single activity.

Returns a comprehensive summary including timing, distance, heart rate, elevation, training effect, and an event_type field. Common event_type values: "race", "training", "uncategorized" (no event type set by the user). The field is omitted for very old activities that pre-date event type support in the Garmin API.

Args: activity_id: ID of the activity to retrieve

ParametersJSON Schema
NameRequiredDescriptionDefault
activity_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden. It goes beyond a simple 'get' by explaining the returned fields and the event_type behavior, including that the field is omitted for old activities. It does not cover errors, permissions, or rate limits, but for a read-only single-resource tool it provides meaningful behavioral context.

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

Conciseness4/5

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

The description is compact and well-structured, front-loading the purpose and then adding return details and the argument definition. There is slight redundancy between 'Get detailed information' and 'Returns a comprehensive summary,' but no filler or unnecessary content.

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

Completeness4/5

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

Given the simple single-parameter schema and the presence of an output schema, the description is largely complete for invoking the tool correctly. It covers the core return fields and a notable edge case (old activities lacking event_type). Explicit guidance on when to use this over sibling activity tools would make it complete.

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

Parameters4/5

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

Schema description coverage is 0%, but the description compensates by explicitly documenting activity_id as 'ID of the activity to retrieve.' This adds meaning beyond the schema's bare type/title, though it could clarify accepted ID formats or whether integer/string forms are interchangeable.

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

Purpose5/5

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

The description opens with 'Get detailed information for a single activity,' naming a specific verb, resource, and singular scope. This clearly distinguishes it from sibling list tools like get_activities and activity-specific tools like get_activity_splits.

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

Usage Guidelines3/5

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

The phrase 'single activity' implies use when you have an activity_id and need one activity's details, but no explicit guidance is given about when to choose this over alternatives like get_activities or get_activity_splits. Usage context is implied rather than stated.

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

get_activity_exercise_setsB

Get exercise sets for strength training activities

Args: activity_id: ID of the activity to retrieve exercise sets for

ParametersJSON Schema
NameRequiredDescriptionDefault
activity_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. 'Get' implies a read-only operation, which is appropriate, but it does not specify what happens for non-strength activities, whether an empty result is possible, or any error behavior.

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

Conciseness4/5

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

The description is concise and front-loaded with the main purpose. The Args section is slightly redundant with the schema, but it is not bloated or confusing.

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

Completeness3/5

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

For a one-parameter getter with an output schema, the basics are covered: what the tool retrieves and which parameter to pass. However, it lacks any context about activity type expectations, empty results, or relationship to similar tools, leaving some ambiguity for an agent.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It does explain that activity_id is the ID of the activity to retrieve sets for, but this adds only modest meaning beyond the parameter name and schema type.

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

Purpose4/5

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

The description clearly states a specific verb and resource: 'Get exercise sets for strength training activities.' It does not explicitly compare against siblings, but the resource is distinct enough that an agent can infer what this tool does.

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

Usage Guidelines3/5

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

The phrase 'for strength training activities' implies the intended use case, but the description gives no explicit guidance on when to choose this over related activity data tools like get_activity_splits or get_activity_fit_data, and no exclusions are provided.

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

get_activity_fit_dataA

Download and parse FIT file for an activity to expose advanced cycling data.

Returns data not available through the standard REST API, including:

  • DI2 / electronic shifting events with cadence at time of shift, grade at shift, gear combinations, shift quality classification, and terrain-grouped shift analysis

  • Cycling dynamics per session and lap: platform center offset (PCO), left/right power balance, torque effectiveness, pedal smoothness

  • Variability Index (NP / avg_power) per session and lap

  • Climb detection with VAM (vertical ascent rate), avg power/cadence/HR per climb, and W/kg per climb (using auto-fetched body weight from Garmin)

  • Grade-correlated stats: avg power, cadence, HR broken down by terrain steepness

  • HR drift / cardiac drift coefficient (aerobic decoupling for rides ≥60 min)

  • Temperature correlation: avg HR/power in hottest vs. coolest portions of ride

  • Power Duration Curve: best mean maximal power at 5s, 30s, 1min, 5min, 10min, 20min, 60min

  • Optional full per-second time series when include_records=True

Shift quality:

  • proactive: shifted at 70-100 rpm (ideal cadence range)

  • reactive: shifted below 70 rpm (already grinding before shifting)

  • coasting: shifted at 0 rpm (mid-stop or freewheeling)

  • spun_out: shifted above 100 rpm (waited too long in easy gear)

Note: DI2 data requires Shimano Di2 / SRAM eTap. Cycling dynamics require a compatible power meter (e.g., Garmin Rally, Favero Assioma, PowerTap P1 pedals).

Args: activity_id: Garmin activity ID include_records: Include full per-second time series (default False). Warning: adds significant data volume for long rides.

ParametersJSON Schema
NameRequiredDescriptionDefault
activity_idYes
include_recordsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of transparency. It discloses a side effect—'Warning: adds significant data volume for long rides'—and hardware dependencies that affect success. It does not explicitly state that the operation is read-only or non-destructive, but given the lack of annotations and the 'download and parse' wording, this is a reasonable transparency level.

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

Conciseness5/5

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

Despite being lengthy, the description is well-organized with bullet points and sections (shift quality, notes, args). It packs substantive information without redundancy or filler. Each sentence contributes to understanding the tool's capabilities, prerequisites, or parameters, making the length appropriate for the complexity of the data returned.

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

Completeness5/5

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

The description is comprehensive for an agent: it details the output categories (DI2 events, cycling dynamics, climb detection, etc.), defines shift quality terms, lists hardware requirements, and explains arguments. No output schema is provided, but the enumerated data types give sufficient context for expected results. The inclusion of a dedicated note about include_records ensures the agent understands the trade-off. Overall, nothing essential is missing.

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

Parameters5/5

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

The schema has zero descriptions for its properties, so the description fully compensates. It explicitly explains activity_id as 'Garmin activity ID' and include_records as 'Include full per-second time series (default False)' with a data volume warning. This covers both parameters completely, leaving no ambiguity about their meanings or defaults.

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

Purpose5/5

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

The description begins with a clear verb+resource: 'Download and parse FIT file for an activity to expose advanced cycling data.' It distinguishes itself from the standard REST API by stating it returns data 'not available through the standard REST API,' and enumerates specific advanced metrics such as DI2 shifting, cycling dynamics, and power curves. This makes the tool's unique purpose obvious relative to the many sibling tools.

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

Usage Guidelines4/5

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

The description provides useful usage guidance by noting hardware prerequisites ('DI2 data requires Shimano Di2 / SRAM eTap') and a warning about include_records adding significant data volume. It also states that it returns data not available through the standard REST API, which tells the agent when to prefer this tool. However, it does not explicitly name alternative sibling tools or give conditional 'use this vs. that' instructions, so it falls short of fully explicit when/when-not guidance.

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

get_activity_gearA

Get gear data used for an activity

Args: activity_id: ID of the activity to retrieve gear data for

ParametersJSON Schema
NameRequiredDescriptionDefault
activity_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

The name and description imply a read-only operation, but no explicit statement about side effects or lack thereof is made. Since annotations are absent, the description carries the full burden; it does not clarify whether the returned gear data includes all fields or just summaries, nor does it mention any rate limits or authentication requirements.

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

Conciseness5/5

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

The description is extremely concise, consisting of one clear sentence plus the parameter explanation. No unnecessary words or redundant information is present.

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

Completeness4/5

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

For a simple retrieval tool, the description is adequate. It does not cover return value details or error conditions, but since an output schema exists (as indicated by context), the lack of return-value explanation is acceptable. The description covers the essential purpose and parameter.

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

Parameters4/5

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

The description explicitly explains the sole parameter: 'ID of the activity to retrieve gear data for'. This provides clear meaning for activity_id. However, it does not specify whether the ID is numeric or string-based, which could cause minor ambiguity given the anyOf type in the schema.

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

Purpose5/5

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

The description clearly states the action: 'Get gear data used for an activity' and identifies the specific resource (gear for an activity). This verb+resource combination is unambiguous and distinct from sibling tools like get_gear or add_gear_to_activity.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as get_gear (list all gear) or add/remove gear tools. The description does not mention any conditions, prerequisites, or scenarios that would make this tool the preferred choice.

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

get_activity_hr_in_timezonesB

Get heart rate data in different time zones for an activity

Args: activity_id: ID of the activity to retrieve heart rate time zone data for

ParametersJSON Schema
NameRequiredDescriptionDefault
activity_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It only restates the get operation and data scope; it does not clarify read-only behavior, timezone conversion semantics, whether data is available for all time zones, or any permissions or rate limits. The output schema may describe the return shape, but the description itself adds little behavioral transparency beyond the tool name.

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

Conciseness5/5

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

The description is compact and front-loaded: the core purpose appears in the first sentence, followed by a short Args block. There is no fluff or repetition of schema details, so every part of the description earns its place.

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

Completeness3/5

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

Complexity is low with one required parameter, and an output schema exists, so the description does not need to explain return values. However, with no annotations and no usage guidance, the description leaves timezone semantics and when-to-use questions unanswered. It is minimally complete for a simple getter but not richly contextual.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It does add some semantic value with 'activity_id: ID of the activity to retrieve heart rate time zone data for,' which explains the parameter's role. However, it does not clarify accepted formats beyond the schema's anyOf, how to find or interpret the ID, or behavior when the activity does not exist, so the compensation is minimal though adequate for a single obvious parameter.

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

Purpose5/5

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

The description names the specific operation: 'Get heart rate data in different time zones for an activity.' This gives a clear verb, resource, and scope. It distinguishes the tool from the closely named sibling get_activity_power_in_timezones by specifying heart-rate data rather than power data.

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

Usage Guidelines2/5

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

There is no guidance about when to use this tool versus alternatives such as get_heart_rates, get_activity_splits, or get_activity_power_in_timezones. The only contextual clue is 'for an activity,' which implies an activity_id is needed but does not explain when this endpoint is the right choice.

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

get_activity_power_in_timezonesA

Get power distribution across training zones for an activity.

Returns time spent in each power zone with watt thresholds and duration. Requires a power meter. Zones are based on the athlete's FTP configured in Garmin Connect.

Args: activity_id: ID of the activity to retrieve power zone data for

ParametersJSON Schema
NameRequiredDescriptionDefault
activity_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses output details (time spent, watt thresholds, duration) and prerequisites (power meter, FTP). It does not state side effects, but the read-only nature is implicit from the name and description, and there is no contradiction.

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

Conciseness5/5

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

The description is concise and well-structured: a one-sentence summary, output details, prerequisites, and parameter explanation. No redundant or vague wording.

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

Completeness4/5

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

Provides essential context: what it returns, prerequisites, and parameter meaning. It does not mention error cases or what happens when no power data exists, but these are minor gaps given the tool's simplicity and the presence of related siblings with similar patterns.

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

Parameters5/5

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

The single parameter activity_id is clearly explained in the Args section as 'ID of the activity to retrieve power zone data for'. Although the schema lacks description, the description fully compensates, making the parameter's meaning unambiguous.

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

Purpose5/5

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

The description clearly states a specific action ('Get power distribution across training zones') for a specific resource ('an activity'). This distinguishes it from sibling tools like get_activity_hr_in_timezones or get_activity_splits.

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

Usage Guidelines4/5

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

Provides condition 'Requires a power meter' and explains FTP basis, which tells the agent when this tool is appropriate. It does not explicitly mention when to choose an alternative, but the unique purpose is clear enough.

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

get_activity_splitsC

Get splits for an activity

Args: activity_id: ID of the activity to retrieve splits for

ParametersJSON Schema
NameRequiredDescriptionDefault
activity_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It only states the action and parameter, giving no information about side effects, permissions, rate limits, or whether the operation is read-only. The verb 'get' implies a read, but this is not explicit, and there is no mention of error conditions or return behavior. This is a minimal disclosure that does not go beyond the literal action.

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

Conciseness4/5

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

The description is extremely concise and front-loaded, with the core purpose stated in the first sentence. The parameter explanation is redundant with the schema but does not add fluff. It is well-structured as a docstring, though the brevity limits the information conveyed. For a one-parameter tool, this length is appropriate, but it could be more informative without losing efficiency.

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

Completeness2/5

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

The description is incomplete in the context of the tool ecosystem. It does not clarify what type of splits are returned (e.g., lap splits, typed splits, summaries), nor does it address the existence of sibling tools that might be more appropriate for specific use cases. The presence of an output schema mitigates the need to describe return values, but the tool's role among the many split-related tools is ambiguous. An agent cannot confidently choose this tool over its siblings without additional information.

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

Parameters2/5

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

The description says 'ID of the activity to retrieve splits for', which adds only slightly to the schema's 'Activity Id' field. It explains the parameter's role but provides no additional context about format, constraints, or typical usage. With 0% schema description coverage, the description should compensate with richer semantics, but it essentially repeats what the parameter name already conveys. This is insufficient.

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

Purpose4/5

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

The description states a clear verb-resource pairing: 'Get splits for an activity'. It identifies the resource (activity splits) and the action (get). However, it does not differentiate from closely related siblings like get_activity_typed_splits or get_activity_split_summaries, which likely also retrieve split data. This is a clear purpose but lacks the specificity to distinguish among similar tools.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention any conditions, prerequisites, or exclusions, nor does it reference sibling tools. An agent must infer the appropriate usage, which is risky given the number of split-related tools available in the sibling list.

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

get_activity_split_summariesC

Get split summaries for an activity

Args: activity_id: ID of the activity to retrieve split summaries for

ParametersJSON Schema
NameRequiredDescriptionDefault
activity_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

There are no annotations provided, so the description carries the full burden of behavior disclosure. It only says 'get' without mentioning return format, volume, pagination, error cases, or any read-only cautions, leaving the agent to 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.

Conciseness3/5

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

The description is appropriately short and front-loaded with the purpose, but the Args block largely duplicates the input schema, adding no real value. Both sentences together are concise, but not every line strongly earns its place.

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

Completeness3/5

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

This is a simple one-parameter read tool, so the minimum is present, but the description does not clarify the meaning or format of 'split summaries' relative to sibling functions like get_activity_splits. Since an output schema exists, return documentation is not strictly needed, yet more context about what the summaries represent would make the description complete.

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

Parameters3/5

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

With schema_description_coverage at 0%, the description should compensate for missing parameter documentation. It does say 'activity_id: ID of the activity to retrieve split summaries for', which adds a little semantic context over the schema name. However, it does not explain the accepted types or where the activity_id comes from.

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

Purpose4/5

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

The description states a clear verb and resource, 'Get split summaries for an activity', so the agent knows what the tool does at a basic level. However, it does not distinguish this from the closely related siblings get_activity_splits and get_activity_typed_splits, leaving a subtle terminology gap.

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

Usage Guidelines2/5

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

The description contains no guidance on when to use this tool instead of get_activity_splits or get_activity_typed_splits. It only repeats the activity_id parameter in the Args block, which is not a usage guideline.

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

get_activity_typed_splitsB

Get typed splits for an activity

Args: activity_id: ID of the activity to retrieve typed splits for

ParametersJSON Schema
NameRequiredDescriptionDefault
activity_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior1/5

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

The description provides no information about side effects, read-only status, data scope, or any behavioral characteristics. With no annotations present, the description itself should disclose such details, but it is entirely silent.

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

Conciseness5/5

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

The description is a single, direct sentence with no extraneous words. It is concise and well-structured, conveying the essential information without padding.

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

Completeness4/5

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

For a simple GET operation with one parameter, the description is adequately complete. The lack of output schema or annotations lowers the burden, and the description covers the core functionality. A brief mention of return type would be beneficial but is not strictly necessary given the low complexity.

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

Parameters5/5

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

The single parameter activity_id is clearly described as 'ID of the activity to retrieve typed splits for'. The meaning and purpose are unambiguous, fully satisfying the parameter explanation requirement.

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

Purpose4/5

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

The description uses a specific verb ('Get') and a specific resource ('typed splits'), making the primary purpose clear. However, it does not explicitly differentiate from sibling tools like get_activity_splits or get_activity_split_summaries, so some ambiguity remains about what 'typed' adds.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as get_activity_splits or get_activity_split_summaries. The description offers no context for selecting this tool over others.

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

get_activity_typesA

Get all available activity types

Returns a list of all activity types supported by Garmin Connect, useful for filtering activities by type.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the behavioral disclosure. It does indicate a read-only retrieval ('Get', 'Returns a list') and the data scope ('supported by Garmin Connect'). However, it leaves out details such as whether the list includes custom or localized activity types, which could matter depending on the agent's task.

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

Conciseness5/5

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

The description is only two sentences: the first is a direct, front-loaded statement of the tool's function, and the second adds a relevant use case. Every word earns its place with no filler or repetition.

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

Completeness5/5

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

Given the tool has no parameters and an output schema is available, the description adequately covers what the tool returns and why it is useful. No critical information needed for correct invocation is missing.

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

Parameters4/5

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

The tool has zero parameters, and schema description coverage is 100%. The description correctly adds no parameter-specific information because none is needed, matching the baseline for parameterless tools.

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

Purpose5/5

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

The description states a specific action and resource: 'Get all available activity types' and clarifies it returns 'a list of all activity types supported by Garmin Connect'. This clearly distinguishes it from sibling tools that set activity types or retrieve activity records.

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

Usage Guidelines4/5

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

The description explicitly identifies a practical context—'useful for filtering activities by type'—which gives the agent a clear cue for when to invoke it. It does not mention exclusions or alternatives, but the intended use case is sufficiently clear.

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

get_activity_weatherA

Get weather data for an activity.

Garmin's weather endpoint returns temperatures in Fahrenheit (from the weather-station source) with no unit indicator, regardless of account settings. This tool converts them to the account's display unit: metric accounts get Celsius, statute_us accounts keep Fahrenheit. The temperature_unit field ("F" or "C") states which unit was returned.

Wind speed, unlike temperature, is already returned in the account's display unit (km/h for metric, mph for statute_us), so it is passed through unconverted and labeled via the wind_speed_unit field.

Args: activity_id: ID of the activity to retrieve weather data for

ParametersJSON Schema
NameRequiredDescriptionDefault
activity_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden, and it does so thoroughly. It explains that the raw endpoint returns Fahrenheit without a unit indicator, that this tool converts temperatures to the account's display unit, and that wind speed is passed through unconverted with its own unit label. This gives the agent essential behavioral context beyond the tool name.

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

Conciseness5/5

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

The description opens with a clear one-sentence purpose and then uses short, organized paragraphs for unit-conversion behavior, followed by an Args section. Every sentence adds useful information, and the structure makes the content easy to scan.

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

Completeness5/5

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

Given the tool has only one required parameter and an output schema is present, the description covers all essential context: what the tool does, what the activity_id means, and the key behavioral quirk around unit conversion. Nothing critical is missing for an agent to invoke it correctly.

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

Parameters4/5

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

The input schema has no parameter descriptions, so the description must compensate. The Args section says 'activity_id: ID of the activity to retrieve weather data for,' which clarifies which activity the ID refers to beyond the schema title 'Activity Id.' For a single, self-explanatory identifier parameter, this is sufficient semantic guidance.

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

Purpose5/5

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

The opening sentence states a specific verb and resource: 'Get weather data for an activity.' This clearly distinguishes the tool from the many activity-related siblings, none of which are about weather. The resource and scope are exactly what an agent needs to select it.

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

Usage Guidelines4/5

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

The description makes the usage context clear: use this when weather data for a particular activity is needed. It does not name exclusions or alternative tools, but the purpose is specific enough that an agent can identify this as the weather-specific activity getter among the sibling tools.

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

get_adhoc_challengesA

Get user-created social/group challenges (e.g., step competitions with friends)

Returns challenges created by users to compete with connections. These are different from official Garmin badge challenges.

Args: start: Starting index for pagination (default 0) limit: Maximum number of challenges to return (default 20, max 100)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
startNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It states that the tool 'returns' challenges, indicating a read operation, but does not disclose potential errors, rate limits, or any additional behavior beyond the basic retrieval. The differentiation from badge challenges adds some context but lacks thorough 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.

Conciseness5/5

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

The description is concise, consisting of two sentences that front-load the purpose and then list the parameters. There is no fluff or redundancy; every sentence adds value.

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

Completeness4/5

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

The tool is positioned within the context of challenges by explicitly contrasting with official badge challenges, and the parameters are fully explained. However, the description does not mention the response structure or any related usage notes, leaving a minor gap in completeness for an agent encountering this tool for the first time.

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

Parameters5/5

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

The description provides meaningful semantics for both parameters: 'start' is the starting index for pagination, and 'limit' is the maximum number to return (with a max of 100). This goes beyond the bare schema types and defaults, giving the agent clear guidance on how to use the parameters.

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

Purpose5/5

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

The description clearly states that the tool retrieves user-created social/group challenges, distinguishing them from official Garmin badge challenges. The verb 'Get' and specific resource type make the purpose unambiguous.

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

Usage Guidelines4/5

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

The description explicitly notes that these challenges are different from official badge challenges, which implies a contrast with sibling tools like get_badge_challenges. However, it does not explicitly state 'use this when you need user-created challenges, use the other for official ones,' leaving some inference to the agent.

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

get_all_day_eventsC

Get daily wellness events data

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.5/5.0
Behavior1/5

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

There are no annotations, and the description does not disclose any behavioral traits such as read-only nature, data source, or potential side effects. Since nothing is disclosed beyond the basic action, the description fails to inform the agent about the tool's behavior.

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

Conciseness5/5

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

The description is extremely concise and to the point, containing only the essential information about the parameter format. There is no redundancy or irrelevant detail, making it efficient for the agent to parse.

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

Completeness2/5

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

The description lacks essential context about what 'wellness events' actually represents, what the response structure will be, or how this data is used. Without output schema details or examples, the agent cannot fully anticipate the tool's behavior or results.

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

Parameters4/5

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

The description provides the date format 'YYYY-MM-DD' in the Args section, which adds meaning beyond the schema's bare type 'string'. This helps the agent correctly format the parameter, but it is the only parameter and the description is otherwise minimal.

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

Purpose3/5

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

The description states a verb 'Get' and a resource 'daily wellness events data', but the term 'wellness events' is ambiguous and could refer to various types of data (e.g., stress, body battery, all-day stress). It does not clearly differentiate from sibling tools like get_all_day_stress or get_body_battery_events.

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

Usage Guidelines1/5

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

No guidance is provided on when to use this tool over alternatives. The description gives no conditions, examples, or hints about appropriate usage scenarios, leaving the agent to guess based on the name alone.

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

get_all_day_stressB

Get all-day stress data

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are present, so the description carries the full burden. It states only the action 'Get' without clarifying whether it is read-only, if there are side effects, or how it behaves on errors or missing data. The name implies a read operation but this is not explicit.

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

Conciseness5/5

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

The description is extremely concise, consisting of one sentence and a parameter format line. No unnecessary information is included, and every word adds value.

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

Completeness3/5

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

The description is complete for a simple getter in terms of its action and parameter, but it does not describe the output format, data structure, or possible error conditions. Given the simplicity, this is acceptable but leaves some gaps.

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

Parameters3/5

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

The input schema has a single required parameter 'date' with no description. The description adds the format 'YYYY-MM-DD' but does not explain the semantic meaning (e.g., the specific day for which stress is requested). This is minimal but adequate for a straightforward date parameter.

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

Purpose5/5

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

The description 'Get all-day stress data' clearly states the action (get) and the resource (all-day stress data). It is specific enough to distinguish from generic stress queries, though it does not explicitly differentiate from sibling tools like get_stress_data.

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

Usage Guidelines1/5

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

No guidance is provided on when to use this tool versus alternative stress-related tools such as get_stress_data, get_stress_summary, or get_weekly_stress. The description does not mention conditions, fallbacks, or selection criteria.

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

get_available_badge_challengesA

Get official Garmin badge challenges available to join

Returns monthly/seasonal challenges from Garmin that the user can join. These challenges award badges and points upon completion.

Args: start: Starting index for pagination (starts at 1) limit: Maximum number of challenges to return (default 20, max 100)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
startNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

The description is a simple retrieval operation with no side effects, but it does not explicitly state that it is read-only or mention any permissions, rate limits, or error conditions. Since annotations are absent, the description carries the burden and provides basic transparency but lacks depth.

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

Conciseness5/5

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

The description is concise, with a clear one-sentence purpose, a brief explanation of returns, and a simple 'Args:' section. No unnecessary words or redundant information.

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

Completeness4/5

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

Since the tool has an output schema (as indicated by 'Has output schema: true'), the description need not enumerate output fields. However, it could briefly mention that the result is a paginated list of challenges, but the pagination parameters already imply that. Overall, the description is sufficient given the schema.

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

Parameters5/5

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

Both parameters are explained in the description: 'start' is the pagination index starting at 1, and 'limit' is the maximum number of results with a default of 20 and a max of 100. This adds meaningful detail that the schema does not provide (the schema only includes type and default).

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

Purpose5/5

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

The description clearly states it retrieves official Garmin badge challenges that are available to join, and distinguishes them from earned badges, ad-hoc challenges, and non-completed challenges by explicitly mentioning 'available to join' and 'monthly/seasonal'.

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

Usage Guidelines2/5

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

No explicit guidance is given about when to use this tool versus other badge-related tools like get_badge_challenges or get_earned_badges. The description implies its use case but does not state conditions or alternatives, leaving the agent to infer.

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

get_badge_challengesA

Get all badge challenges the user has joined (completed and in-progress)

Returns the user's history of badge challenges including progress, completion status, and earned dates.

Args: start: Starting index for pagination (starts at 1) limit: Maximum number of challenges to return (default 20, max 100)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
startNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of explaining behavior. It clearly indicates the scope (user's joined challenges) and the return content, but it does not explicitly state that the operation is read-only or mention any side effects, authentication requirements, or rate limits. However, the verb 'Get' makes the read-only nature implicit.

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

Conciseness5/5

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

The description is concise and well-structured: a single sentence for the main purpose, one for the return details, and a clear breakdown of parameters. There is no extraneous information, making it easy for an agent to parse quickly.

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

Completeness5/5

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

The description provides enough context for an agent to know exactly what the tool does and what parameters mean. Since an output schema is indicated as existing, the description does not need to enumerate the return structure. It covers the essential information for correct invocation.

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

Parameters5/5

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

The schema only provides types and defaults for 'start' and 'limit', but the description adds meaningful semantics: 'start' is the starting index (1-based) and 'limit' is the maximum number to return with a default of 20 and max of 100. This fully explains the parameters beyond the raw schema.

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

Purpose5/5

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

The description clearly states the tool retrieves all badge challenges the user has joined, including both completed and in-progress ones. It also lists the specific data returned (progress, completion status, earned dates), making the purpose unambiguous and distinct from sibling tools like get_earned_badges or get_available_badge_challenges.

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

Usage Guidelines3/5

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

The description implies when to use this tool—when you need the user's full history of joined badge challenges—but it does not explicitly contrast it with alternatives such as get_non_completed_badge_challenges or get_available_badge_challenges. The guidance is inferred rather than stated.

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

get_blood_pressureC

Get blood pressure data

Args: start_date: Start date in YYYY-MM-DD format end_date: End date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateYes
start_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the behavioral disclosure burden. It only says 'Get blood pressure data' and lists parameter formats; it does not disclose read-only behavior, date-range inclusivity, timezone handling, or response shape. The agent cannot infer side effects or edge-case behavior.

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

Conciseness4/5

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

The description is short and free of irrelevant content. The core purpose is front-loaded and the argument details are listed cleanly. It could use a sentence or two more of behavioral context, but as written it is economical.

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

Completeness3/5

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

With only two required date parameters and an output schema present, the tool does not need an explanation of return fields. Yet the complete lack of usage guidance and behavioral transparency leaves gaps: the agent is not told how to interpret the date range, whether results are aggregated or raw, or whether there are any constraints. This is a minimal viable description, not a complete one.

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

Parameters3/5

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

The schema provides only parameter names and string types, so the description adds the YYYY-MM-DD format for both date arguments. This is helpful but minimal: it still omits whether the date range is inclusive, what time of day applies, or how invalid dates are handled. For a tool with 0% schema coverage, the compensation is partial.

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

Purpose4/5

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

The description states a specific verb and resource ('Get blood pressure data'), and the resource name distinguishes it from sibling tools like set_blood_pressure. However, it does not go beyond the tool name to describe what the returned blood pressure data contains or how it is scoped, so it is clear but minimally informative.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives, nor any exclusions or prerequisites. Sibling tools include several health-data getters and set_blood_pressure, but the description does not help the agent choose this one over those or clarify whether it is the only blood-pressure read query.

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

get_body_batteryC

Get body battery data with events

Args: start_date: Start date in YYYY-MM-DD format end_date: End date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateYes
start_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It implies a read operation but does not explain event semantics, data availability, date-range behavior, or any other runtime characteristics beyond taking two dates.

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

Conciseness4/5

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

The description is short and well-structured, front-loading the tool's purpose and then cleanly listing arguments. It avoids filler, though the argument section mostly restates schema property names.

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

Completeness3/5

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

For a simple two-parameter read tool with an output schema present, this is minimally viable. The description is incomplete in that it never differentiates from get_body_battery_events, and the meaning of 'events' is unexplained, creating a real selection risk.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It does add meaning by exposing the YYYY-MM-DD format and naming start/end as a date range, but it stops short of clarifying inclusivity, timezone handling, or max range limits.

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

Purpose4/5

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

States a specific action and resource: 'Get body battery data with events'. However, the phrase 'with events' is ambiguous, and the close sibling get_body_battery_events exists, so the description does not clearly distinguish this tool from that one.

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

Usage Guidelines2/5

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

No guidance is given for when to use this tool versus get_body_battery_events or other health-data getters. The description only lists arguments, leaving the agent to infer the appropriate use case.

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

get_body_battery_eventsC

Get body battery events data

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior1/5

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

The description gives no information about side effects, read-only nature, return format, or any behavioral details. Since annotations are absent, the description bears full responsibility and fails to disclose anything beyond the action name.

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

Conciseness5/5

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

The description is extremely concise, with no redundant words or fluff. It directly states the purpose and parameter format, making it highly efficient.

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

Completeness2/5

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

Given many similar tools (e.g., get_body_battery, get_body_composition), the description lacks context about what 'events' specifically means, what the output looks like, or how it differs from siblings. No output schema is provided, leaving the user without a complete picture.

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

Parameters4/5

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

The single parameter 'date' is explained with a format specification 'YYYY-MM-DD' in the docstring, which is sufficient for usage. However, no further semantic details (e.g., timezone handling) are provided, but the format note meets the basic need.

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

Purpose4/5

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

The description clearly states a 'Get' action on 'body battery events data', identifying the resource and verb. However, it does not differentiate from the sibling tool 'get_body_battery', so purpose is clear but not fully distinct.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives like 'get_body_battery' or which conditions apply. The description just restates the function name without any context for selection.

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

get_body_compositionA

Get body composition data for a single date or date range

Args: start_date: Date in YYYY-MM-DD format or start date if end_date provided end_date: Optional end date in YYYY-MM-DD format for date range

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
start_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior1/5

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

With no annotations, the description alone must convey behavior, but it only states that data is retrieved. It does not disclose read-only status, potential errors, or any side effects, leaving the agent without information about consequences of invoking the tool.

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

Conciseness5/5

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

The description is brief and direct, leading with the purpose and followed by parameter details. It avoids redundant information and is easy to parse.

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

Completeness4/5

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

The description covers the tool's function and all parameters, and since an output schema exists, it need not describe return values. However, it lacks any examples or edge-case notes, which could be useful but are not essential.

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

Parameters5/5

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

The description fully explains both parameters: start_date is required and can be a single date or the start of a range, and end_date is optional and completes the range. It also specifies the YYYY-MM-DD format, which is not present in the schema.

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

Purpose5/5

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

The description clearly states the action ('Get') and resource ('body composition data') in the first sentence, making the tool's purpose unambiguous. It also specifies the date-based scope, which distinguishes it from other data retrieval tools.

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

Usage Guidelines3/5

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

The description implies when to use this tool (when body composition data is needed) but does not explicitly compare it to alternatives like get_weigh_ins or get_stats_and_body. No conditions or exclusions are provided, so guidance is minimal.

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

get_coursesA

List all courses saved on Garmin Connect.

Returns a curated list of courses with id, name, distance, activity type and creation date.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

No annotations are present, so the description carries the full burden. It indicates a read-only operation returning a curated list of fields, which is transparent about the result. It does not mention error handling or rate limits, but the behavior is clear enough for a simple list tool.

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

Conciseness5/5

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

The description is concise, using two sentences to convey purpose and output fields. It is well-structured and free of unnecessary detail.

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

Completeness4/5

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

The description names the specific fields returned, which covers the output structure. However, it does not mention pagination or limits, which could be relevant for a list endpoint. Still, for a simple listing tool, it is reasonably complete.

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

Parameters3/5

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

There are no parameters, so schema coverage is 100% (empty). Per the rubric, the baseline is 3 since the description does not need to elaborate on absent parameters.

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

Purpose5/5

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

The description clearly states the tool's purpose: to list all courses saved on Garmin Connect. It also specifies the returned fields, distinguishing it from related tools like get_course_details or delete_course.

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

Usage Guidelines3/5

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

The description does not explicitly mention when to use this tool versus alternatives. It implies a simple 'list all' operation, but lacks guidance on scenarios like needing a specific course or filtering options, so usage guidance is minimal.

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

get_custom_foodsA

Search or list user's custom foods

Returns custom foods the user has created. Use the search parameter to find existing foods by name before creating duplicates — the response includes foodId and servingId needed for log_custom_food.

For branded catalog foods (FatSecret), use search_foods instead.

Args: search: Search term to filter foods by name (default: list all) start: Starting index for pagination (default 0) limit: Maximum number of results (default 20)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
startNo
searchNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

No annotations are provided, so the description carries full responsibility. It clearly indicates this is a read-only lookup and mentions returned fields, but it does not explicitly state that no data is modified or describe pagination edge behavior.

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

Conciseness5/5

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

The description is succinct and well-structured, leading with the main purpose, followed by usage guidance and parameter details. It avoids unnecessary fluff.

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

Completeness5/5

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

For a simple list/search tool with an output schema, the description provides sufficient context: it identifies user-specific custom foods, explains the purpose of returned IDs, and directs users to the correct sibling tool for branded foods. No essential information is missing.

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

Parameters5/5

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

The schema has no parameter descriptions, but the Args section explains all three parameters: search filters by name, start is the pagination index, and limit is the maximum result count. Defaults are also included.

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

Purpose5/5

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

The description clearly states the tool's purpose: search or list the user's custom foods. It also distinguishes this tool from search_foods, which handles branded catalog foods.

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

Usage Guidelines5/5

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

It explicitly instructs to use the search parameter before creating duplicates and notes that the response includes foodId and servingId for log_custom_food. It also names search_foods as the alternative for branded foods, so usage guidance is concrete.

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

get_custom_food_serving_unitsA

Get available serving units for custom foods

Returns the list of valid serving units (e.g. G, ML, OZ) that can be used when creating custom foods.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description must carry behavioral disclosure. It correctly states the tool returns a list of valid units, implying a read-only, side-effect-free operation. However, it does not detail pagination, auth requirements, or whether the list is exhaustive, although for a simple lookups these are minor gaps.

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

Conciseness4/5

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

The description is compact and front-loaded with the main statement, followed by a clarifying detail with examples. The opening sentence closely mirrors the tool name, causing slight redundancy, but the rest earns its place.

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

Completeness4/5

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

This is a simple, parameterless lookup with an output schema present, so the description is nearly complete. It conveys the return concept and its use case, which is enough for an agent to call it correctly; nothing important is missing for this level of complexity.

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

Parameters4/5

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

The tool has zero parameters, and the schema coverage trivially covers them. The description adds value by explaining what the returned units are used for, even though no parameter semantics are needed. Baseline 4 for 0 params is appropriate.

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

Purpose5/5

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

The description states a specific verb ('Get') and resource ('available serving units for custom foods'), and clarifies with examples (G, ML, OZ). It is clearly distinct from sibling tools like get_custom_foods, so an agent can tell the difference without opening schemas.

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

Usage Guidelines4/5

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

The description explicitly frames the tool as a lookup to be used 'when creating custom foods,' giving clear context for when to call it. It does not name alternative tools or exclusion conditions, but no obvious alternative exists for this resource, so the guidance is sufficient.

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

get_cycling_ftpA

Get the latest cycling Functional Threshold Power (FTP) data.

Returns the most recent cycling FTP estimate available from Garmin.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It clearly indicates a read-only, no-argument operation returning the latest cycling FTP estimate from Garmin, which is sufficient for a simple getter; it does not detail edge cases like missing data or sync delay, but the output schema covers return structure.

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

Conciseness4/5

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

The description is very short and front-loaded, but the first sentence and second sentence partly restate the same idea ('Get the latest' vs. 'Returns the most recent'). Still, it is compact and easy to scan.

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

Completeness5/5

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

For a zero-parameter read with an output schema, the description is complete: it names the exact data (cycling FTP) and the recency behavior (latest estimate). No additional usage steps or preconditions are needed.

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

Parameters4/5

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

The tool has zero parameters and 100% schema description coverage, so there are no parameter semantics to document. The baseline of 4 applies because the description correctly implies no arguments are needed.

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

Purpose5/5

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

The description states a specific verb ('Get'), a resource ('cycling Functional Threshold Power data'), and a qualifier ('latest', 'from Garmin'). This clearly distinguishes the tool from sibling metric getters such as get_lactate_threshold or get_vo2max_trend.

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

Usage Guidelines3/5

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

The description implies the tool is appropriate when the agent needs the most recent cycling FTP estimate, but it does not explicitly state when to prefer it over alternatives or mention exclusions. Usage context is inferred from the tool name and wording rather than directly guided.

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

get_daily_stepsB

Get steps data for a date range

Args: start_date: Start date in YYYY-MM-DD format end_date: End date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateYes
start_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It states that data is retrieved but does not mention read-only behavior, authentication requirements, rate limits, pagination, or whether the returned data is aggregated or raw.

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

Conciseness5/5

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

The description is concise and front-loaded with the action and object. The Args section is directly useful and adds no unnecessary detail.

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

Completeness3/5

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

The tool is simple and the description covers the core operation, but it omits return-value details such as the unit of measurement, whether summaries or per-day records are returned, and any constraints on the date range. These are useful for an agent selecting and using the tool.

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

Parameters3/5

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

The description explains the date parameters and their YYYY-MM-DD format, adding value over the bare schema. However, it does not clarify whether the date range is inclusive, whether a maximum span applies, or how timezones are handled.

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

Purpose4/5

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

The description states a specific action ('Get steps data') and a clear scope ('for a date range'). It is distinct enough from most siblings, though the name 'get_daily_steps' is needed to clarify that the result is daily step values rather than generic step data.

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

Usage Guidelines2/5

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

No guidance is provided about when to use this tool instead of similar siblings such as get_steps_data or get_weekly_steps. The description gives no context about the expected use case or when this tool is preferred.

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

get_daily_weigh_insA

Get weight measurements for a specific date

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the operation and the date format, without mentioning what is returned, whether multiple measurements can exist for one date, or any limitation or error behavior. This is minimal beyond the core purpose.

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

Conciseness5/5

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

The description is extremely brief and front-loaded with the core purpose, followed by a single argument specification. There is no fluff, and the only additional detail is the required date format, which is necessary.

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

Completeness3/5

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

Given the tool's low complexity (one required parameter, no nested objects, and an output schema), the description covers the basic calling needs. However, it does not distinguish this from get_weigh_ins or mention any behavioral nuances, leaving some ambiguity given the large sibling set.

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

Parameters4/5

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

The input schema provides only a string property named 'date' with no description (0% schema description coverage), so the description must compensate. It does so by specifying the exact YYYY-MM-DD format, which is essential for correct invocation and is not present in the schema.

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

Purpose5/5

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

The description opens with the verb 'Get' and clearly identifies the resource 'weight measurements' scoped to 'a specific date.' This directly differentiates it from sibling tools like get_weigh_ins (likely broader) and add/delete weigh-in tools, giving an agent enough to select it correctly.

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

Usage Guidelines3/5

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

The description implies usage for a specific date, but it does not explicitly state when to choose this over get_weigh_ins or other weigh-in tools. No exclusions or alternative recommendations are included, so the agent must infer the distinction from the phrase 'for a specific date.'

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

get_device_alarmsA

Get alarms from all Garmin devices

Returns all configured alarms with their schedules, sounds, and enabled status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

The description uses 'Get' and 'Returns', indicating a read-only operation, but it does not explicitly disclose side effects, rate limits, or pagination behavior. Since no annotations are provided, the description carries the burden and is somewhat minimal but not misleading.

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

Conciseness5/5

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

The description is short and to the point, consisting of two concise sentences. It avoids unnecessary detail and is well-structured for quick comprehension.

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

Completeness4/5

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

With an output schema present, the description does not need to explain return values in depth, but it does provide a helpful summary of the alarm attributes (schedules, sounds, enabled status). It lacks any mention of authentication or potential limitations, but these are not critical for a straightforward getter.

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

Parameters3/5

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

The tool has zero parameters, and the schema coverage is 100% (vacuously). The description does not add parameter information because none exist, which is consistent with the baseline for high schema coverage.

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

Purpose5/5

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

The description clearly states the tool's purpose with a specific verb ('Get') and resource ('alarms from all Garmin devices'), and it specifies the returned data (schedules, sounds, enabled status). No sibling tool appears to handle alarms, so there is no ambiguity.

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

Usage Guidelines3/5

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

The description implies usage for retrieving alarms but does not explicitly state when to use it versus alternative tools. However, since there is no other alarm tool among the siblings, the necessity is implicit. It lacks explicit when-to-use/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_device_last_usedB

Get information about the last used Garmin device

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are present, and the description does not disclose whether the tool is read-only, has side effects, or requires special permissions. As a getter, it is likely safe, but this is not explicitly stated.

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

Conciseness5/5

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

The description is a single, succinct sentence with no unnecessary words. It is well-structured and immediately conveys the tool's purpose.

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

Completeness3/5

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

The description is minimal and does not elaborate on what 'information' includes or the return format. Given the existence of many similar device-related tools, additional context about the specific data returned would improve completeness, but the core purpose is clear.

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

Parameters3/5

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

The tool has no parameters, so schema coverage is 100% vacuously. The description adds no extra meaning about parameters, but none are needed. Baseline score of 3 applies.

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

Purpose4/5

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

The description clearly states the action (get) and the target (information about the last used Garmin device). It is specific enough to differentiate from many sibling tools, though it could be more explicit about what 'information' entails (e.g., model, firmware, battery).

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives like get_devices or get_primary_training_device. The description does not mention any conditions or exclusions, leaving the agent to infer appropriateness.

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

get_devicesA

Get all Garmin devices associated with the user account

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

The description uses 'Get' which clearly implies a read-only operation. With no annotations provided, the description carries the full burden, and it sufficiently communicates that this tool has no side effects.

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

Conciseness5/5

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

The description is a single, concise sentence with no redundant words. It front-loads the action and clearly defines the scope.

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

Completeness4/5

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

For a simple getter with no parameters, the description is sufficient for an agent to understand what the tool does. It does not elaborate on the return format, but that is not strictly necessary for this type of operation.

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

Parameters3/5

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

The tool has zero parameters, so there is nothing to describe. The schema coverage is complete (100%), and the description does not need to add parameter context. A baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action ('Get') and the exact resource ('all Garmin devices associated with the user account'). It is unambiguous and distinguishes from tools that fetch individual device details.

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

Usage Guidelines3/5

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

The description implies usage by indicating 'all' devices, but it does not explicitly mention when to use this tool instead of related device-specific tools like get_device_settings or get_primary_training_device. The context is clear but not formally guided.

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

get_device_settingsA

Get settings for a specific Garmin device

Returns device configuration including time/date format, units, activity tracking settings, and alarm information.

Args: device_id: Device ID (optional; defaults to the most recently used device when omitted; can be obtained from get_devices or get_device_last_used)

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of disclosing behavior. It states that it returns device configuration and lists the included settings, but it does not mention potential errors (e.g., device not found) or the exact output structure. This provides some transparency but not comprehensive detail.

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

Conciseness5/5

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

The description is concise and well-structured. It uses two short sentences for the purpose and a clear parameter explanation, with no wasted words or redundant information.

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

Completeness5/5

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

For a simple read operation with one optional parameter, the description provides enough context for an agent to invoke the tool correctly. It explains the return content, and the parameter guidance covers how to obtain the device ID. The output schema is marked as present, so the absence of explicit return fields in the description is acceptable.

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

Parameters5/5

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

The description fully explains the only parameter (device_id): it is optional, defaults to the most recently used device, and can be obtained from specific sibling tools. This adds significant meaning beyond the schema, which only specifies type and default with no description.

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

Purpose5/5

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

The description clearly states the verb 'Get' and the resource 'settings for a specific Garmin device', and it lists the types of settings returned (time/date format, units, activity tracking, alarms). This distinguishes it from sibling tools like get_devices and get_device_last_used, which return device lists or IDs.

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

Usage Guidelines4/5

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

It provides guidance on how to obtain the device_id parameter via get_devices or get_device_last_used and explains the default behavior when omitted. It does not explicitly state alternatives for the same purpose (since there are none), but the guidance is sufficient for typical use.

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

get_device_solar_dataA

Get solar data for a specific device

Returns solar charging data for devices with solar panels (e.g., Instinct Solar, Fenix Solar). Only applicable to solar-capable devices.

Args: device_id: Device ID (can be obtained from get_devices) date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
device_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

The description states it 'Returns solar charging data,' indicating a read-only operation. It also mentions the limitation that it is only for solar-capable devices, which hints at potential behavior for unsupported devices. However, it does not describe the output format, error handling, or whether it can return empty results.

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

Conciseness5/5

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

The description is concise, consisting of two short sentences and a simple argument list. No redundant information or filler is present, and the structure is clear and easy to parse.

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

Completeness4/5

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

The description provides sufficient context for a simple getter tool: what it does, the compatible device types, and how to obtain the required parameters. It does not detail the structure of the returned data, but for a straightforward retrieval operation, the context is adequate.

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

Parameters4/5

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

The schema provides no descriptions for the parameters, but the description compensates by explaining that device_id can be obtained from get_devices and that date must be in YYYY-MM-DD format. This gives enough semantic meaning for basic usage, though it lacks further detail on accepted values or constraints.

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

Purpose5/5

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

The description clearly states the tool retrieves solar charging data for a specific device and provides examples of compatible devices (Instinct Solar, Fenix Solar). The verb 'Get' and resource 'solar data' make the purpose unambiguous.

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

Usage Guidelines4/5

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

The description explicitly notes that the tool is only applicable to solar-capable devices, giving a clear condition for when to use it. It also directs users to obtain device_id from get_devices, providing a practical prerequisite. It does not compare with sibling tools, but the applicability condition largely suffices.

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

get_earned_badgesB

Get earned badges for user

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are present, so the description carries full burden. 'Get' implies a read-only operation, but the description does not disclose whether it returns the current user's badges, whether authentication is required, or any filtering/ordering/pagination behavior. Minimal beyond the operation itself.

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

Conciseness5/5

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

A single concise sentence with no filler, front-loads the operation and resource. It earns its place despite lacking detail.

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

Completeness3/5

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

The tool is simple, has no parameters, and an output schema exists, so full return documentation is not needed. However, the description is thin: it fails to clarify the implicit user scope (current user?) and gives no routing signal among the many badge-related siblings. Adequate for a trivial getter but with clear gaps.

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

Parameters4/5

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

There are zero parameters, so the schema provides no target information. The description adds the concept of 'user' as the scope of the query, which is meaningful; however, it leaves unspecified whether this means the authenticated user, which is a minor ambiguity. Baseline for 0 params is 4.

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

Purpose4/5

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

States a clear verb ('Get') and resource ('earned badges') and implies a user scope, so an agent can identify the operation. It doesn't explicitly differentiate from sibling badge tools like get_badge_challenges or get_available_badge_challenges, but the 'earned' qualifier distinguishes it from challenge/available lists.

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

Usage Guidelines2/5

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

No guidance on when to call this vs alternatives; no exclusions or context. The tool name and siblings imply a decision between earned badges, available challenges, and non-completed challenges, but the description does not state it.

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

get_endurance_scoreA

Get endurance score data between dates

Args: start_date: Start date in YYYY-MM-DD format end_date: End date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateYes
start_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the burden of specifying behavior. It indicates a read operation (getting data) but does not mention potential side effects, rate limits, or the structure of the returned data. It is adequate but not richly transparent.

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

Conciseness5/5

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

The description is concise, using a single sentence plus a brief arg list. Every word is purposeful and there is no fluff.

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

Completeness3/5

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

For a simple date-range retrieval, the description is minimally sufficient but leaves out details about the output format, units, or any filtering options. Given its simplicity, it does not mislead, but it lacks the completeness that would fully prepare an agent for the response.

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

Parameters4/5

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

The description adds format details (YYYY-MM-DD) for both start_date and end_date that are not in the schema. This clarifies the expected input, though it does not specify whether dates are inclusive or how timezones are handled.

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

Purpose5/5

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

The description clearly states the verb 'Get' and the resource 'endurance score data' with a date range scope. It is unambiguous and distinguishes itself from sibling tools that focus on other metrics like steps, heart rate, or training readiness.

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

Usage Guidelines3/5

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

The description explains what the tool does but provides no guidance on when to use it versus alternatives, nor any context about date inclusivity, timezone handling, or typical use cases. It is not misleading but lacks explicit usage instructions.

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

get_fitnessage_dataB

Get fitness age data

Args: date: Date in YYYY-MM-DD format details: If True, include component breakdown (BMI, RHR, vigorous activity) with targets and improvement suggestions

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
detailsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of disclosing behavior. It only says 'get' and does not disclose whether the operation is read-only, what happens on missing data, or any rate-limit or authentication concerns. This is a meaningful gap for an API tool.

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

Conciseness4/5

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

The description is compact and front-loads the core purpose before the Args list. Each parameter description adds value beyond the schema and there is no extraneous text, though a single-line alternative could be slightly tighter.

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

Completeness4/5

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

It has an output schema, and the description covers the essential usage information: required date format and the behavior of optional details. It does not mention error handling or rate limits, but for a read operation these are less critical given the existing structured output.

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

Parameters4/5

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

The schema has 0% description coverage, so the description must compensate. It adds crucial meaning by specifying the exact date format (YYYY-MM-DD) and clarifying that 'details' controls whether BMI, RHR, and vigorous-activity breakdowns with targets and suggestions are returned.

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

Purpose4/5

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

The description states the resource ('fitness age data') and a clear action ('get'), so the purpose is easily understood. It doesn't explicitly distinguish this from sibling getters, but the resource name is specific enough to avoid confusion in the agent's selection.

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

Usage Guidelines2/5

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

No guidance is given about when to use this tool versus alternatives, nor are any exclusions or alternative tool names mentioned. The only hints are embedded in parameter descriptions rather than a clear use-case statement.

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

get_floorsA

Get floors climbed data

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden, but it only states the action and does not disclose any side effects, permissions, or limitations beyond getting data.

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

Conciseness5/5

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

The description is extremely concise and front-loaded with the core purpose, with no unnecessary words or repetition.

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

Completeness4/5

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

For a simple read-only query tool, the description is sufficient to understand what it does and what input is required, though it does not describe the return format or content.

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

Parameters4/5

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

The single parameter 'date' is described with a specific format (YYYY-MM-DD) in the description, adding useful detail beyond the schema's generic 'Date' title.

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

Purpose5/5

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

The description 'Get floors climbed data' uses a specific verb and resource, clearly distinguishing this tool from the many other get_* tools in the sibling list.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives like get_stats or get_user_summary, which might also provide similar data.

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

get_full_nameA

Get user's full name from profile

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'get', which implies read-only, but gives no explicit statements about characteristics such as authentication requirements, whether the data is always available, or any side effects. For a getter, this is minimal; no extra behavioral concerns are revealed.

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

Conciseness5/5

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

The description is one short sentence with no filler. It is fully front-loaded and every word earns its place. For a zero-parameter getter, this is appropriately concise.

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

Completeness4/5

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

Given the tool's simplicity (0 params) and the existence of an output schema, the description is basically complete for invoking the tool. The only gap is the lack of usage guidance and differentiation from similar siblings, but as a simple getter, the description sufficiently conveys the operation. It does not need to explain return values because an output schema exists.

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

Parameters4/5

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

There are zero parameters in the schema, so the baseline is 4. The description adds minor context by noting the source 'from profile', but otherwise the action is fully defined by the name. No additional parameter semantics are needed because there are none.

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

Purpose5/5

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

The description states exactly what it does with a specific verb and resource: 'Get user's full name from profile'. It clearly distinguishes itself from sibling tools like get_user_profile, which would return the full profile, not just the full name. This is a precise, unambiguous getter.

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

Usage Guidelines2/5

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

There is no guidance about when to use this tool versus alternatives. The description does not mention on the many sibling getters that could provide the full name (e.g., get_user_profile, get_user_summary) or when this specific tool is preferable. The agent receives no context for selection.

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

get_garmin_coach_workoutsA

Get Garmin Coach workouts around the given date

Returns workouts from the active Garmin Coach/training plan, including plan metadata, workout identifiers, dates, sport, duration, completion status, rest days, race days, and workout intent when Garmin provides them. Adaptive plans expose only Garmin's currently generated window, typically the current week; future dates may return no workouts even while a plan is active. The count includes rest-day entries.

Garmin's standalone Daily Suggested Workouts are generated on compatible devices. As of July 31, 2026, no supported or known Garmin Connect web/API endpoint, including those exposed by this project's python-garminconnect dependency, returns the device's upcoming DSW schedule. This tool returns Garmin Coach/training-plan workouts and does not synthesize device-generated suggestions.

This is the preferred tool for Garmin Coach requests. The legacy get_training_plan_workouts tool returns the same data; do not call both.

Adaptive Coach plans typically expose workout_uuid; other plan families may expose numeric workout_id. Pass whichever identifier is present to get_workout_by_id. Rest-day UUIDs may return minimal detail without workout segments.

Args: calendar_date: Reference date in YYYY-MM-DD format (returns week's workouts)

ParametersJSON Schema
NameRequiredDescriptionDefault
calendar_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the full transparency burden. It does a good job disclosing that future dates may return no workouts, that count includes rest days, that rest-day UUIDs may return minimal detail, and that no synthesis of Daily Suggested Workouts occurs. It does not explicitly state read-only behavior, but the getter semantics are clear from the wording.

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

Conciseness4/5

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

The description is fairly long with multiple explanatory paragraphs, but each section adds meaningful context: return fields, plan limitations, sibling comparison, and identifier guidance. The structure is readable and useful, though slightly more verbose than strictly necessary.

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

Completeness4/5

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

The description covers the primary input semantics, output content, plan-family differences, rest-day behavior, and relationship to sibling tools. It does not specify the exact response schema or possible error conditions, but the provided context is sufficient for typical use.

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

Parameters3/5

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

The schema has 0% description coverage, so the description must compensate. It explains calendar_date format and that the returned data covers the week around that date. However, it does not clarify week boundaries, timezone handling, or any edge cases like invalid dates, which leaves some ambiguity for a bare string parameter.

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

Purpose5/5

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

The description clearly states that the tool returns Garmin Coach/training-plan workouts for a given date. It also distinguishes the tool from the legacy get_training_plan_workouts sibling, making its purpose unambiguous.

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

Usage Guidelines5/5

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

The description explicitly names the preferred use case for Garmin Coach requests, warns against calling both this tool and get_training_plan_workouts, and clarifies that Daily Suggested Workouts are not available through this endpoint. This gives concrete when-to-use guidance.

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

get_gearA

Get all gear registered with the user account

Returns complete gear inventory including usage statistics and default activity associations. No parameters required - user profile is fetched automatically.

Args: include_stats: Include usage statistics for each gear item (default True). Set to False for faster response with large gear collections.

ParametersJSON Schema
NameRequiredDescriptionDefault
include_statsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses what is returned, that the user profile is fetched automatically, and the performance tradeoff of include_stats. It does not explicitly declare read-only status or rate-limit behavior, but none are implied.

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

Conciseness4/5

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

Front-loaded with the main action and resource, followed by a tight Args block. Each sentence adds useful information, though the first sentence and 'Returns complete gear inventory' are slightly redundant.

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

Completeness4/5

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

For a tool with one optional parameter and an output schema, the description is largely complete: it covers purpose, return contents, parameter semantics, defaults, and performance behavior. The only notable gap is the lack of explicit alternative guidance.

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

Parameters5/5

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

Schema coverage is 0%, but the description fully compensates. It explains that include_stats controls usage statistics inclusion, states the default True, and gives a concrete reason to set it to False for large gear collections.

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

Purpose5/5

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

States a specific verb and resource: 'Get all gear registered with the user account' and reinforces scope with 'complete gear inventory'. This clearly distinguishes it from activity-specific gear tools like get_activity_gear.

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

Usage Guidelines3/5

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

The description makes the intended use clear: retrieving the user's full gear inventory. However, it never explicitly names alternatives such as get_activity_gear or states when not to use this tool, so routing decisions are mostly left to inference.

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

get_goalsA

Get Garmin Connect goals (active, future, or past)

Args: goal_type: Type of goals to retrieve. Options: "active", "future", or "past"

ParametersJSON Schema
NameRequiredDescriptionDefault
goal_typeNoactive

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

The word 'Get' clearly indicates a read-only operation, and there are no annotations to contradict this. It does not mention side effects, permissions, or error behavior, but for a simple getter this level of transparency is adequate.

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

Conciseness5/5

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

The description is concise and well-structured, with a clear one-line purpose followed by an Args section. It contains no filler and every sentence adds useful information.

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

Completeness4/5

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

The description provides enough context for an agent to call the tool correctly, including the parameter options. While it does not describe the return format, an output schema exists, so that omission is acceptable.

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

Parameters5/5

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

The input schema only provides a type and default for goal_type, but the description explicitly lists the allowed options ('active', 'future', 'past'), adding meaningful semantic detail beyond the schema. Parameter semantics are fully covered.

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

Purpose5/5

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

The description clearly states the action ('Get') and the resource ('Garmin Connect goals'), and further specifies the three goal types (active, future, past). This is specific enough to distinguish the tool from the many other get_* sibling tools.

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

Usage Guidelines4/5

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

The description explains the purpose and the acceptable goal_type values, making it clear when to use this tool. It does not explicitly contrast with sibling tools, but since no other sibling tool retrieves 'goals', the usage guidance is sufficient.

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

get_heart_ratesA

Get full heart rate time-series data

Note: This returns detailed 2-minute interval data (~25KB). For a compact summary, use get_heart_rates_summary().

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It mentions the return type (detailed time-series) and size (~25KB), which gives some behavioral expectations. It does not explicitly state side effects, but 'get' implies read-only, which is acceptable.

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

Conciseness5/5

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

The description is succinct, with the purpose, a distinguishing note, and parameter format all in a few lines. No unnecessary details.

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

Completeness5/5

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

For a simple get operation with one parameter, the description is complete. It provides the tool's purpose, output characteristics, and the parameter format. The contrast with the summary tool adds context without excessive length.

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

Parameters5/5

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

The schema has one parameter (date) with no description, but the tool description adds 'Date in YYYY-MM-DD format', providing the required format and meaning. This fully covers the single parameter.

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

Purpose5/5

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

The description clearly states the tool retrieves full heart rate time-series data for a given date, distinguishing it from the summary variant via 'full' and 'detailed'. The sibling list includes get_heart_rates_summary, which reinforces the distinction.

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

Usage Guidelines5/5

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

Explicitly names the alternative tool get_heart_rates_summary() for compact summaries, implying this tool is for detailed data needs. The note about 2-minute intervals and ~25KB size further guides when 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_rates_summaryA

Get heart rate summary with essential metrics (lightweight version)

Returns a compact summary (~500 bytes) instead of full time-series data (~25KB). Ideal for daily health checkups and LLM integrations.

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses the output size (~500 bytes) and that it returns a compact summary. It does not mention error handling or missing data, but overall it is reasonably transparent for a read-only summary tool.

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

Conciseness5/5

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

The description is concise, with a front-loaded purpose and use case. It avoids unnecessary verbosity while still conveying the key differences from the full data tool.

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

Completeness4/5

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

It provides enough context for an agent to decide when to use this tool versus get_heart_rates. It could specify what 'essential metrics' include, but that is not required for invocation. Given the simplicity of the tool, the description is nearly complete.

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

Parameters5/5

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

The only parameter 'date' is given a clear format ('YYYY-MM-DD'), which is essential for correct invocation. Since the schema has no description for this parameter, the description adds necessary meaning beyond the schema.

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

Purpose5/5

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

States a specific action: 'Get heart rate summary with essential metrics' and clearly distinguishes it from the full time-series version with 'lightweight version' and 'compact summary'. The resource and verb are unambiguous.

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

Usage Guidelines5/5

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

Explicitly says 'instead of full time-series data', which identifies when to use this tool over the fuller alternative. It also mentions 'Ideal for daily health checkups and LLM integrations', providing contextual use cases.

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

get_hill_scoreA

Get hill score data between dates

Args: start_date: Start date in YYYY-MM-DD format end_date: End date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateYes
start_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are present, and the description does not disclose whether the operation is read-only, requires authentication, or has any side effects. The simplicity of a 'get' implies read-only, but this is not explicitly stated.

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

Conciseness5/5

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

The description is extremely concise, with the key action and parameters presented in two short sentences. It is well-structured and front-loaded with the purpose.

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

Completeness4/5

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

For a simple getter with a date range, the description is complete enough. It does not elaborate on the return value, but given the existence of an output schema (not shown), this is acceptable. No critical context is missing.

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

Parameters4/5

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

The description explicitly provides the format (YYYY-MM-DD) for both start_date and end_date, which adds meaning beyond the basic schema types. It does not specify inclusivity/exclusivity or additional constraints, but the format guidance is valuable.

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

Purpose5/5

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

The description clearly states the verb 'get' and the resource 'hill score data' with a date range scope, which is specific and distinguishes it from other getter tools in the sibling list.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool over similar getter tools (e.g., get_heart_rates, get_sleep_data). The description only states the action without contextual usage conditions.

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

get_hrv_dataB

Get Heart Rate Variability (HRV) data

Args: date: Date in YYYY-MM-DD format return_timeseries: If True, include detailed 5-minute HRV readings (can be large)

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
return_timeseriesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description must convey side effects or output characteristics. It only notes that time series data 'can be large', but fails to disclose what the default response contains (e.g., daily summary fields) or any performance implications beyond size. The read-only nature is not explicitly stated.

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

Conciseness5/5

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

The description is succinct, using a brief leading phrase and two bullet points for parameters. Every sentence adds value, with no redundant or verbose content.

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

Completeness3/5

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

While the tool is simple and an output schema exists (not shown here), the description lacks details about the structure of the returned data (e.g., HRV metrics like RMSSD or stress score). It also does not clarify the relationship with related trend tools, leaving minor gaps for an agent deciding whether this is the right call.

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

Parameters5/5

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

Both parameters in the schema are fully explained: the date format is given as YYYY-MM-DD, and return_timeseries is described as including detailed 5-minute readings. This exceeds the simple schema by providing practical meaning and usage details.

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

Purpose4/5

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

The description clearly states the function is to retrieve HRV data for a given date, with an option to include time series. However, it does not differentiate from sibling tools like get_hrv_trend or get_heart_rates, which weakens precision.

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

Usage Guidelines1/5

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

There is no guidance on when to use this tool versus alternatives. The description only explains parameters and does not mention scenarios where this tool is preferred or avoided, leaving the agent to infer usage from the name alone.

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

get_hrv_trendA

Get HRV (Heart Rate Variability) trend over a date range.

Returns daily HRV values and weekly rolling averages. Single-day HRV is too noisy to act on — use this tool to identify baseline shifts that signal accumulated fatigue or recovery. A drop of >10ms from the 7-day baseline warrants reducing training load.

Recommended range: 7-21 days. Maximum: 30 days.

Args: start_date: Start date in YYYY-MM-DD format end_date: End date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateYes
start_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description must disclose behavior. It states that it 'Returns daily HRV values and weekly rolling averages', revealing the output shape. However, it does not explicitly confirm that the operation is read-only or describe any potential side effects, though 'Get' implies no mutation.

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

Conciseness4/5

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

The description is well-structured with a purpose statement, return details, usage guidance, and parameter descriptions. It is slightly longer than necessary due to the clinical interpretation note ('A drop of >10ms...'), but this information is relevant and not redundant, so it earns a high score.

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

Completeness5/5

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

For a simple two-parameter getter, the description fully covers the tool's purpose, usage, return content, and parameter formats. The existence of an output schema further fills in structural details, making the description complete for a caller to use the tool correctly.

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

Parameters4/5

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

The input schema has no descriptions for either parameter, so the description's statement of 'Start date in YYYY-MM-DD format' and 'End date in YYYY-MM-DD format' adds essential format information. It does not specify inclusivity of dates or ordering, but the phrase 'over a date range' implies inclusive bounds, and ordering is conventionally understood.

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

Purpose5/5

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

The description clearly states the verb 'Get' and the specific resource 'HRV trend over a date range'. It further distinguishes this from a simple data fetch by mentioning weekly rolling averages, making the purpose unambiguous even without comparing to sibling tools.

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

Usage Guidelines5/5

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

It explicitly explains when to use this tool: 'Single-day HRV is too noisy to act on — use this tool to identify baseline shifts'. It also provides practical usage constraints with 'Recommended range: 7-21 days. Maximum: 30 days.', guiding the caller on appropriate date ranges.

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 hydration data

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

There are no annotations and the description does not disclose any behavioral aspects such as read-only nature, potential side effects, or data format. The name implies a simple retrieval, but the lack of explicit statements leaves behavior under-transparent.

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

Conciseness5/5

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

The description is extremely concise, using only two short sentences to convey the purpose and parameter. There is no unnecessary verbosity or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description does not specify what the response contains (e.g., structure, units, possible values) and no output schema is provided. This leaves the agent without critical context about the return data, making the tool incomplete for practical use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description explicitly defines the only parameter 'date' with its format 'YYYY-MM-DD', fully covering the input schema. The schema itself lacks a description, but the prose compensates comprehensively.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Get hydration data' and identifies the resource (hydration data). It is unambiguous about the tool's core purpose, though it does not elaborate on what specific hydration metrics are included.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention any conditions, prerequisites, or compare with other getter functions in the sibling list, leaving the agent to infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_inprogress_virtual_challengesA

Get in-progress virtual challenges/expeditions

Returns virtual challenges (like walking expeditions on famous trails) that the user is currently participating in.

Args: start: Starting index for pagination (default 1, must be >= 1; garminconnect 0.3.2 rejects 0 for this endpoint) limit: Maximum number of challenges to return (default 20, max 100)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
startNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It provides important runtime details: the pagination start index must be >= 1, the limit max is 100, and a version-specific note that garminconnect 0.3.2 rejects 0. The read-only nature is implied by 'Get/Returns' but not explicitly declared, and rate limits or error behavior are not discussed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: a one-sentence purpose statement followed by a concise Args list. Every sentence provides actionable information, including a practical version-specific warning, with no fluff or repetition of schema defaults.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only endpoint with two optional parameters and an output schema present, the description covers the essential usage: what the tool returns, what param constraints exist, and how pagination works. The only missing element is explicit guidance on when to use this over sibling challenge tools, which is already acknowledged in the usage dimension.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only provides types and defaults for the two parameters. The description adds essential meaning: start is a pagination index with a lower bound, limit is the maximum number of challenges with a max cap, and a real-world compatibility quirk about start=0. This fully compensates for the 0% schema description coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action ('Get') on a specific resource ('in-progress virtual challenges/expeditions') and defines what qualifies: challenges the user is currently participating in. This clearly sets it apart from sibling tools like get_badge_challenges or get_adhoc_challenges, which target different challenge types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly conveys the intended use: retrieve virtual challenges the user is currently participating in. However, it does not explicitly mention alternatives or provide when-not-to-use guidance, so it stops short of full routing instructions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_lactate_thresholdA

Get lactate threshold data

Returns lactate threshold information, which is the exercise intensity at which lactate starts to accumulate in the blood. This is a key metric for endurance training.

Args: start_date: Start date in YYYY-MM-DD format (optional, omit for latest) end_date: End date in YYYY-MM-DD format (optional, omit for latest)

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
start_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the disclosure burden. It does explain that omitting dates returns the latest data and that date args are optional, which is useful. However, it does not describe output granularity, units, possible missing-data behavior, or any API-specific constraints, leaving the behavioral picture incomplete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core purpose, followed by a one-sentence domain definition and a clear Args section. It has a small redundancy in repeating 'lactate threshold' and separate near-identical wording for start_date and end_date, but every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, optional-parameter retrieval tool with an output schema, the description covers the essential invocation details: what the metric is, which parameters exist, their format/optionality, and the 'latest' fallback. It does not address date-range inclusiveness or sibling-tool selection, but those are minor gaps given the low complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides only names, types, and defaults with no descriptions. The description compensates fully by documenting both parameters: 'Start date in YYYY-MM-DD format (optional, omit for latest)' and the equivalent for end_date. This gives the agent the exact format and the meaningful default behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Get lactate threshold data', then defines what lactate threshold means. Among a large set of sibling get_* tools, the metric is clearly identified and not easily confused with related metrics like get_cycling_ftp or get_heart_rates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to choose this tool versus related metric or trend tools. The only context is that lactate threshold is a key endurance metric, but the description never states when an agent should call this instead of a sibling like get_vo2max_trend, get_training_status, or get_cycling_ftp.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_lifestyle_logging_dataB

Get lifestyle logging data for a specific date

Returns lifestyle logging data which allows users to track behaviors and their impact on health metrics.

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, and the description only states that it returns data. It does not disclose potential side effects, read-only nature, rate limits, or authentication requirements, placing full burden on the description which remains minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, using two short sentences plus an Args section. No redundant information or filler is present; it is straight to the point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The term 'lifestyle logging data' is vague and does not specify what types of metrics are included (e.g., stress, sleep, steps). Given the many closely related sibling tools, more context is needed to fully understand what this tool returns and how it differs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter (date) is described with a specific format (YYYY-MM-DD), which adds meaningful detail beyond the schema's basic type/title. This helps the agent pass a correctly formatted value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and the resource ('lifestyle logging data') with a date parameter. It is distinguishable from siblings like get_steps_data or get_sleep_data, though it does not explicitly name an alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus other get_* tools. It only explains the date parameter but does not mention conditions or scenarios where this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_menstrual_calendar_dataA

Get menstrual calendar data between specified dates

Automatically chunks requests longer than 92 days, Garmin's server-side limit, and stitches the responses together.

Args: start_date: Start date in YYYY-MM-DD format end_date: End date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateYes
start_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses a key behavioral trait: it chunks long requests and stitches responses, indicating internal handling of pagination or limits. It does not mention return format, potential errors, or whether it is read-only (though 'Get' implies so), leaving some behavioral aspects unspecified.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, consisting of two sentences that deliver the primary purpose and a relevant behavioral note. No unnecessary words or redundant details, making it highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists (as noted in context), the description does not need to explain return values. It adequately covers the essential usage context, including the chunking behavior for long date ranges. Minor details like date inclusivity are omitted but not critical for basic use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds crucial meaning to both parameters by specifying 'YYYY-MM-DD format' for start_date and end_date, which the schema lacks. This clarifies the expected input format and resolves potential ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and resource ('menstrual calendar data') with a specific date range. It does not explicitly contrast with the sibling tool 'get_menstrual_data_for_date', but the range vs. single-date distinction is implicit, making the purpose understandable without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a guideline about automatic chunking for requests over 92 days, which helps with long ranges. However, it does not mention when to prefer this tool over the single-date alternative or any other usage context, relying on the user to infer the appropriate scenario.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_menstrual_data_for_dateB

Get menstrual data for a specific date

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the responsibility for indicating side effects. The verb 'get' implies read-only behavior, but the description does not explicitly state that it has no side effects, nor does it mention any data-return limitations or error conditions. This is adequate but not thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise and front-loaded. It states the purpose in a single sentence and then documents the only parameter. There is no unnecessary verbiage or redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description tells what the tool does but not what the returned menstrual data will look like, what fields are included, or how it might compare to related menstrual endpoints. Since the output schema is not included in the visible definition, the lack of any expected-response detail leaves the agent somewhat under-informed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only indicates that 'date' is a required string, but the description adds the exact expected format ('YYYY-MM-DD'), which is valuable. No additional context such as timezone or date-range constraints is provided, but for a single parameter this is reasonably well covered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and the resource ('menstrual data') for a specific date. However, it does not explicitly distinguish itself from the sibling tool 'get_menstrual_calendar_data' beyond the date-specific wording, so it is not fully self-contained in differentiating alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as 'get_menstrual_calendar_data' or other health-data getters. The description simply states what it does without explaining the appropriate context or selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_morning_training_readinessA

Get morning training readiness score

Returns the morning training readiness assessment, which evaluates recovery status and readiness to train based on overnight metrics.

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden of conveying the operation. It clearly states this is a retrieval operation by saying 'Get' and 'Returns', which implies read-only behavior with no side effects. It also explains what the returned assessment evaluates, giving the agent useful behavioral context beyond the tool name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, starts with the core purpose, adds one useful clarifying sentence about what the score evaluates, and includes the essential parameter format. There is no redundant or filler content; every line contributes to correct invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple one-parameter retrieval tool, and an output schema exists to define the return shape. The description covers the tool's purpose, the meaning of the score, and the exact date format. No critical information needed to call the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It fully documents the single required parameter, 'date', and provides the crucial format constraint 'YYYY-MM-DD'. This goes beyond the schema's generic title 'Date' and gives the agent everything needed to supply a valid value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Get' with a specific resource 'morning training readiness score', and explains what the score represents: recovery status and readiness to train based on overnight metrics. The 'morning' qualifier and the reference to overnight metrics help distinguish this from sibling tools like get_training_readiness and get_training_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for retrieving the morning readiness assessment, and the overnight-metrics wording hints at when it is appropriate. However, it does not explicitly state when to prefer this over related tools such as get_training_readiness or get_body_battery, nor does it mention any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_non_completed_badge_challengesA

Get badge challenges currently in progress (not yet completed)

Returns active challenges the user has joined but hasn't completed yet. Useful for tracking current progress toward badge goals.

Args: start: Starting index for pagination (starts at 1) limit: Maximum number of challenges to return (default 20, max 100)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
startNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of transparency. It explains the core functionality and pagination parameters, but it does not mention whether the operation is read-only, what happens when no challenges are found, or any potential errors. It also lacks detail on the order of results, which is important for pagination.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is succinct and well-organized: a one-line summary, a brief explanatory paragraph, and a clear Args section. No unnecessary words or filler, and the structure makes the tool's purpose and parameters easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has a simple getter function with an output schema, so the description does not need to explain the return format. It covers the essential context: what the tool does, which challenges it returns, and how pagination works. The description is complete for an agent to decide when and how to use it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only defines 'start' and 'limit' as integers with defaults, but the description adds critical semantics: start is a 1-based index and limit has a max of 100. This goes beyond the schema and provides the information needed to use the parameters correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states that the tool retrieves badge challenges that are currently in progress (not yet completed), distinguishing it from sibling tools like get_badge_challenges (all challenges) and get_available_badge_challenges (joinable ones). It clearly identifies the resource and the specific subset returned.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions it is 'useful for tracking current progress toward badge goals,' which gives context for when to use it. It does not explicitly name alternatives or state when not to use it, but the purpose is clear enough that an agent can infer appropriate usage from the description and sibling tool names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_nutrition_daily_food_logA

Get daily food consumption records for a date

Returns food items logged throughout the day including calories, macronutrients, and meal associations.

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that the tool returns food items logged throughout the day including calories, macronutrients, and meal associations, which sets expectations for a read operation. It does not discuss side effects or prerequisites, but the 'get' semantics and simple single-date scope make those gaps minor.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: a purpose sentence, a return-content sentence, and a single Args entry. There is no redundant filler or repetition of schema fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter daily read with an output schema available, the description is complete. It states the resource scope, the return content categories, and the required date format, leaving no significant gap for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It provides the necessary date format (YYYY-MM-DD) that the schema does not include, and it directly documents the only required parameter. This is sufficient for an agent to invoke the tool correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb and resource: 'Get daily food consumption records for a date.' The second sentence clarifies what is returned — food items, calories, macronutrients, and meal associations. This clearly distinguishes it from nutrition siblings such as get_nutrition_daily_meals and get_nutrition_daily_settings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly indicates this tool is for retrieving a single day's food consumption records. It provides a clear context for use, but it does not explicitly name alternatives or state when not to use this tool, so it falls just 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_nutrition_daily_mealsA

Get daily meal summaries for a date

Returns meal-level summaries (breakfast, lunch, dinner, snacks) with nutritional totals for each meal. Each meal includes a mealId needed for logging food items to that meal.

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that the tool returns meal summaries and each meal includes a mealId for logging, which is useful. However, it does not explicitly state that this is a read-only operation, nor mention date handling, timezone, or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, well-structured, and front-loaded with the primary purpose. The returns detail and parameter documentation are directly relevant with no filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with one required parameter and an output schema already present. The description explains what the tool returns and why mealId matters, making it sufficient for correct invocation. It could be slightly more complete with explicit sibling differentiation or date edge-case behavior, but these are minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does by documenting the date parameter as YYYY-MM-DD format, which is essential for correct invocation. It does not add additional context like valid date ranges or timezone behavior, but for a single required parameter the format guidance is significant.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool gets daily meal summaries and specifies the resource (breakfast, lunch, dinner, snacks) with nutritional totals. It does not explicitly differentiate from related siblings like get_nutrition_daily_food_log or get_nutrition_daily_settings, but the meal-summary focus is reasonably distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: use it to retrieve meal-level summaries and obtain mealId values needed for logging food items. It does not explicitly state when not to use it or name alternative tools for food logs, but the intended use case is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_nutrition_daily_settingsA

Get nutrition plan/settings for a date

Returns the user's nutrition goals and targets including calorie targets, macronutrient goals, and plan configuration.

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full burden. It implies a read-only operation via 'Get' and 'Returns' but does not explicitly mention side effects, permissions, rate limits, or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief and focused, with no redundant wording. It front-loads the purpose and immediately explains the return content and parameter format.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only getter with one parameter, the description is complete: it states what is retrieved, what is returned, and the date format. No output schema is provided, but the description sufficiently describes the expected response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides only 'date' as a string with no description. The tool description adds the crucial format 'YYYY-MM-DD', which fully clarifies the parameter's expected value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool 'Get nutrition plan/settings for a date' and describes the returned data: calorie targets, macronutrient goals, and plan configuration. This distinguishes it from sibling tools like set_nutrition_daily_settings and get_nutrition_daily_meals.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives such as get_nutrition_daily_meals or get_nutrition_daily_food_log. The read-only intent is implied by 'Get' but not stated as a direct instruction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_personal_recordD

Get personal records for user

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

D1.8/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of disclosing behavior. It only says 'get', implying a read operation, but provides no detail on side effects, required permissions, data scope, or output characteristics. This is insufficient for a tool that likely returns sensitive personal data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence, but it is under-specified rather than concise. It lacks essential detail, so the brevity is not a virtue. A concise description would still convey purpose and usage in a few words without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations, no parameter explanations, and no description of the output schema, this description is grossly incomplete. The tool likely returns a set of records, but the agent has no idea what to expect, how to interpret the results, or when to call it. This is far below the minimum viable standard.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema is fully covered. The baseline for 0 params is 4. The description adds no parameter-specific meaning because there are no parameters, but this is acceptable given the absence of parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get personal records for user' is essentially a restatement of the tool name with minimal added context. It names a verb and resource but is vague about what 'personal records' means (e.g., fitness records, personal bests?) and does not distinguish this from many similar get_* siblings like get_user_summary or get_stats. It barely clarifies the tool's specific function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives. No context, no exclusions, no mention of what distinguishes it from the dozens of other get_* tools. An agent has no way to know which scenario calls for this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_power_duration_curveA

Get season-best Power Duration Curve across recent activities.

Downloads FIT files for recent cycling activities and computes best mean maximal power at each standard duration. Returns season bests with which activity and date each best came from.

Durations: 5s (sprint), 30s, 1min, 5min (VO2 max proxy), 10min, 20min (FTP proxy), 60min

Use the 20-minute best × 0.95 as a strong FTP estimate without a formal test.

Warning: downloads multiple FIT files — may take 30-60 seconds for 20 activities.

Args: num_activities: Number of recent activities to analyze (default 20, max 50) activity_type: Activity type to filter (default "cycling")

ParametersJSON Schema
NameRequiredDescriptionDefault
activity_typeNocycling
num_activitiesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It transparently reveals that it downloads multiple FIT files and may take 30-60 seconds. It also mentions it computes and returns season bests. However, it does not explicitly state it is a read-only operation or discuss any side effects beyond downloads, lacking full transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is slightly verbose with repeated mentions of downloading and durations, but it is well-structured and front-loaded with the core purpose. It earns a 4 because the extra details like the FTP formula and warning are valuable, though some redundancy exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description provides a comprehensive context: it explains the output ('Returns season bests with which activity and date each best came from'), includes the standard durations, and gives a practical usage tip for FTP estimation. It is 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.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaning to both parameters beyond the schema: 'num_activities' is explained as number of recent activities with a max of 50, and 'activity_type' is explained as a filter with default 'cycling'. This fully covers the parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get season-best Power Duration Curve across recent activities' with a specific verb and resource. It distinguishes itself from sibling tools like get_cycling_ftp and get_lactate_threshold by focusing on the power duration curve derived from multiple activities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains when to use the tool, especially for estimating FTP via the 20-minute best × 0.95 formula, and includes a warning about download time. However, it does not explicitly mention alternatives or when not to use it, though the FTP estimation context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pregnancy_summaryA

Get pregnancy summary data

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description only says 'Get', which implies a read-only operation. It does not explicitly confirm side effects or lack thereof, but for a simple getter the inference is reasonable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, consisting of a single sentence with no unnecessary words. It is well-structured and easily digestible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool (no parameters, likely a simple summary return), the description is adequately complete. The output schema is stated to exist, so return values are covered externally.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters, so schema coverage is technically 100%. The baseline for high coverage is 3, and the description adds no additional parameter-related information, which is acceptable given the absence of parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (Get) and the resource (pregnancy summary data), which is distinct from all sibling tools. However, it lacks detail on what the summary includes, but it is sufficient for basic identification.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool versus alternatives. While it is likely the only tool for pregnancy summary, the description does not state this or provide any context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_primary_training_deviceB

Get information about the primary training device

Returns details about the device designated as primary for training metrics, along with other wearable devices on the account.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of disclosing behavioral traits. It states that the tool returns details, but does not explicitly mention whether it is read-only, what data format is returned, or any side effects, permissions, or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, consisting of two clear sentences. It avoids unnecessary details and gets straight to the point, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, parameterless getter, the description is sufficiently complete. It clearly states what information is returned and the concept of a primary training device. It could slightly benefit from noting how this differs from get_devices, but the current level is adequate for the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters, so schema coverage is effectively 100% and there is no parameter information to add. The description does not need to explain parameters, but it also does not provide any extra semantic value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool gets information about the primary training device and explains what is returned, including details about the designated primary device and other wearable devices. This distinguishes it from the more generic get_devices sibling in the provided context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit guidance on when to use this tool versus alternatives such as get_devices or get_device_last_used. There is no mention of appropriate use cases, exclusions, or conditions that would help an agent choose this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_progress_summary_between_datesB

Get progress summary for a metric between dates

Args: start_date: Start date in YYYY-MM-DD format end_date: End date in YYYY-MM-DD format metric: Metric to get progress for (e.g., "elevationGain", "duration", "distance", "movingDuration")

ParametersJSON Schema
NameRequiredDescriptionDefault
metricYes
end_dateYes
start_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations provided, and the description does not disclose any side effects, read-only nature, or required permissions. The user is left without information about the tool's behavior beyond its apparent purpose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, leading with the primary purpose in the first sentence and clarifying parameters in the second. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple getter, the description covers the essential purpose and parameters. Since an output schema exists, the return value does not need to be explained. Minor caveats like possible empty results are not mentioned but are not critical.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaning to all three parameters (start_date, end_date, metric) by specifying formats and giving an example for metric. This compensates for the schema's lack of descriptions, though it could be more explicit about valid metric values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and the resource ('progress summary') with a specific scope ('between dates' for a given metric). This unambiguously distinguishes it from the many other getter tools in the sibling list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives. It does not mention any prerequisites, limitations, or contrast with similar getters like 'get_stats' or 'get_goals'.

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 predicted race times based on current fitness level

Returns Garmin's predictions for 5K, 10K, half marathon, and marathon finish times based on the user's recent training data and VO2 max.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations to indicate side effects or read-only behavior. The description states that it 'Returns' predictions, which implies a read-only operation, and the tool name begins with 'get', reinforcing this. However, it does not explicitly mention that no data is modified, so it partially relies on convention. Given the absence of annotations, this score is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, consisting of two sentences. The first sentence is a clear summary, and the second provides essential details about the output (distances and basis). No unnecessary information is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple getter with no parameters, the description is complete. It specifies what is returned (predictions for four race distances) and the underlying data (recent training data and VO2 max). It does not describe an output schema, but the presence of an output schema is indicated in the context, and the description is sufficient for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the schema coverage is complete (100%). The description does not need to explain parameters. According to the baseline rule for 0 parameters, this scores a 4; the description adds no parameter-specific details because none exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool retrieves predicted race times for specific distances (5K, 10K, half marathon, marathon) based on fitness data. It uses the specific verb 'Get' and identifies the resource ('predicted race times'), making its purpose unambiguous and distinct from sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly indicates when to use the tool (when the user wants race time predictions based on training data and VO2 max). It does not explicitly differentiate from alternatives, but given the tool's unique function among many getters, the usage context is clear enough. No explicit exclusions are needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_respiration_dataA

Get full respiration time-series data

Note: This returns detailed interval data (~20KB). For a compact summary, use get_respiration_summary().

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided (no readOnlyHint or destructiveHint), so the description carries the burden. It mentions the response size (~20KB) and implies a read-only 'Get' operation, but it doesn't explicitly state that there are no side effects or that the request may be large/slow beyond the size note.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and well-structured: a clear purpose, a note about data size, an alternative reference, and an Args section. Every sentence adds value and there is no redundant content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the single parameter and no output schema shown, the description covers the key context: what data is returned, its approximate size, the alternative for summaries, and the expected date format. It's sufficient for an agent to call it correctly, though a brief note on the response structure would fully round it out.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides only 'date' with type string and no description (0% schema coverage). The description compensates by specifying the format 'YYYY-MM-DD', which adds meaning beyond the schema. However, it doesn't explain what date range or timezone assumptions apply, so a small gap remains.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get') and resource ('full respiration time-series data'). It explicitly distinguishes itself from the sibling tool get_respiration_summary, so an agent can identify which tool to use without opening other schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly names the alternative get_respiration_summary() and gives the condition for using it ('For a compact summary'). It also notes the data size (~20KB), providing clear guidance on when to choose this tool versus the summary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_respiration_summaryA

Get respiration summary with essential metrics (lightweight version)

Returns a compact summary (~300 bytes) instead of full time-series data (~20KB).

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It usefully discloses that the response is a compact summary (~300 bytes) rather than full time-series data (~20KB), but it does not describe exact included metrics, possible date restrictions, or any other behavioral nuances beyond the size contrast.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: it states the purpose, immediately gives the key behavioral distinction (summary vs full data), then documents the single parameter. Every sentence contributes useful information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read operation with a provided output schema, the description is largely complete: it explains the tool's purpose, the compact nature of the response, and the required date format. It falls short only by not explicitly naming sibling tools for differentiation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides only the parameter name 'date' with type string and no description, so the description's explicit 'Date in YYYY-MM-DD format' adds the necessary semantic detail. For a single-parameter tool, this fully compensates for the 0% schema description coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves a respiration summary and frames it as the lightweight version that returns compact data rather than full time-series. It distinguishes the tool from the full-data sibling implicitly, though it does not name get_respiration_data or get_respiration_trend explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'instead of full time-series data' gives an implied usage context: use this when a compact summary is sufficient and full data is not needed. However, it does not explicitly name the alternative tool or state when to prefer a different respiration endpoint such as get_respiration_trend.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_respiration_trendA

Get overnight respiration rate trend over a date range.

Elevated resting respiration rate (compared to personal baseline) is an early warning sign for overreaching, illness, or poor recovery. Use this alongside HRV trend for a complete recovery picture.

Recommended range: 7-21 days. Maximum: 30 days.

Args: start_date: Start date in YYYY-MM-DD format end_date: End date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateYes
start_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the burden. It adds domain context (elevated respiration as a warning sign) and a range constraint, but it does not disclose edge-case behavior such as what happens beyond 30 days, timezone handling, or the exact definition of 'overnight.' The 'Get' verb implies read-only behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well organized: purpose, domain context, usage guidance, then args. Each sentence adds value, though the clinical context sentence is helpful but not strictly necessary for invoking the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema covers return values, and the description covers the two required parameters with format and range guidance. It is complete enough for a simple read-only trend tool, but it could be stronger by explicitly distinguishing this from get_respiration_data and get_respiration_summary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It documents both parameters with format ('YYYY-MM-DD') and adds a recommended/maximum range, which is meaningful beyond the bare schema that only declares them as strings.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get overnight respiration rate trend over a date range.' It clearly conveys what the tool returns and the 'trend' wording distinguishes it from sibling tools like get_respiration_data and get_respiration_summary, though it does not explicitly name those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear usage context: 'Use this alongside HRV trend for a complete recovery picture' and gives a 'Recommended range: 7-21 days. Maximum: 30 days.' This tells an agent when the tool is appropriate, but it does not state when to prefer get_respiration_data or get_respiration_summary instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_rhr_dayC

Get resting heart rate data

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The verb 'Get' implies a read-only operation, but with no annotations the description carries the full burden of explaining behavior. It does not state what is returned, whether any side effects occur, or how the response is structured, leaving the actual behavior under-specified.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and free of irrelevant content, with the Args block clearly listing the parameter. It is not padded, though the first sentence is somewhat generic and could have been more specific without adding length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and a large sibling list, the description leaves important context missing: it does not state what the returned resting heart rate data looks like, what units are used, or how this endpoint differs from the many other heart-rate and summary tools. The single date argument helps, but the overall contract is incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds the date format 'YYYY-MM-DD' beyond the raw schema, which is helpful for the single date parameter. However, it does not clarify the meaning of the date, timezone considerations, or any constraints such as valid ranges or historical limits.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the verb and resource, 'Get resting heart rate data,' but uses the vague term 'data' and does not explicitly mention the single-day scope that the tool name and date argument imply. It also lacks any differentiation from sibling tools like get_heart_rates or get_heart_rates_summary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool instead of related heart-rate tools. There is no mention of scenarios, exclusions, or alternatives, so an agent cannot distinguish this endpoint from get_heart_rates, get_heart_rates_summary, or other cardiovascular endpoints.

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 between two dates with curated summary list

Returns workouts that have been scheduled on the Garmin Connect calendar, including their scheduled dates and completion status.

Args: start_date: Start date in YYYY-MM-DD format end_date: End date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateYes
start_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the responsibility of conveying behavior. It states the tool 'Returns workouts' and is phrased as a read-only operation, which clearly implies no side effects. It does not explicitly mention that data is unchanged, but the 'Get' verb and return wording are sufficient for a user to infer read-only behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is composed of two brief, focused sentences: a one-line summary and a slightly more detailed explanation. There is no redundant information, jargon, or filler. It efficiently conveys the essential purpose and output without unnecessary length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description confirms the output is a summary list including scheduled dates and completion status, giving users a preview of the return structure. Since an output schema exists but is not shown here, the description cannot fully describe the response format. However, it provides enough context for basic usage and expectations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description specifies that start_date and end_date are in YYYY-MM-DD format and that the query is 'between two dates'. This gives clear semantics for the two required parameters, though it does not state whether the range is inclusive or exclusive. The schema only lists string types, so the description adds important format details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves scheduled workouts for a date range and returns a summary list with dates and completion status. It uses the verb 'Get' and specifies the resource ('scheduled workouts'), making the purpose obvious. It does not explicitly contrast with sibling tools like schedule_workout or get_workouts, but the meaning is still unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what the tool does but does not provide explicit guidance on when to use it versus other workout-related tools (e.g., get_workouts for saved templates, schedule_workout for creating schedules). It implies usage for viewing the calendar of scheduled workouts, but the absence of alternative references leaves some ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sleep_dataA

Get full sleep data with all details

Note: This returns detailed sleep data (~50KB). For a compact summary, use get_sleep_summary().

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It adds one useful trait—the response is detailed and roughly 50KB—which is relevant for an agent deciding whether to call it. However, it does not mention authentication, rate limits, or other behavioral constraints, though as a read-only getter the risk is modest.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured with the purpose first, followed by the critical payload-size note and then the argument format. Every sentence earns its place, and there is no redundant or vague wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the single required parameter, an output schema, the explicit date format, and the pointer to a lighter-weight alternative, the description provides enough context for correct invocation. The presence of an output schema means return values do not need to be explained in the description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only defines 'date' as a string with no format information, and schema description coverage is 0%. The description compensates by specifying the exact expected format (YYYY-MM-DD). For a single-parameter tool, this fully clarifies the input requirement.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Get full sleep data') and indicates it provides all details. It also distinguishes the tool from the sibling get_sleep_summary by framing this as the detailed alternative, so an agent can differentiate between them without examining schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly names the sibling tool get_sleep_summary and provides the selection criterion: use that tool when a compact summary is desired. This clearly signals when to prefer the alternative, effectively telling the agent when this tool is the right choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sleep_summaryA

Get sleep summary with only essential metrics (lightweight version)

This endpoint returns a compact summary of sleep data (~350 bytes) instead of the full granular data (~50KB). Ideal for daily health checkups and LLM integrations where the full time-series data would overwhelm the context window.

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It states that the endpoint returns a compact summary rather than full time-series data, which is a meaningful behavioral trait. It also explains the payload size tradeoff. It does not mention error behavior or auth, but for a simple read-only getter this is reasonably transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the first line states the purpose and the lightweight nature, followed by a clear use-case sentence and a minimal Args section. Every sentence adds useful information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with one required parameter and an output schema present, so return-value documentation is already covered. The description covers the key tradeoff and parameter format. It could optionally point to get_sleep_summary_range for multi-day needs, but that is not essential for this endpoint's daily-summary purpose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides no description for the date parameter (0% coverage), but the description compensates by specifying 'Date in YYYY-MM-DD format.' This adds concrete format guidance beyond the schema's bare string type, though it does not elaborate on timezone or edge-case semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get', the resource 'sleep summary', and the key differentiator: 'only essential metrics (lightweight version)' versus full granular data. It also quantifies the difference (~350 bytes vs ~50KB), making it easy for an agent to distinguish this from get_sleep_data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear usage context: 'Ideal for daily health checkups and LLM integrations where the full time-series data would overwhelm the context window.' It implies the alternative is the full-granularity endpoint, though it does not explicitly name get_sleep_data or get_sleep_summary_range as alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_spo2_dataB

Get SpO2 (blood oxygen) data

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure, but it only states that SpO2 data is retrieved. It does not mention what happens when no data exists for the date, whether the returned value has units or a specific structure, or any other behavioral traits. The name implies a read operation, but the description adds little beyond that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences and front-loads the tool's purpose before the argument documentation. There is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter getter with an output schema available, the description covers the essential input contract. It is slightly thin on behavior/no-data semantics, but that is partially mitigated by the output schema and the low tool complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, date, is given meaning beyond the schema by specifying 'YYYY-MM-DD format'. Since schema description coverage is 0%, this is essential and adequate for a single-parameter tool, though it does not clarify timezone or what date the metric refers to.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action ('Get') and resource ('SpO2 (blood oxygen) data'), making the core purpose immediately clear. It does not explicitly differentiate itself from sibling data getters, but SpO2 is a distinct health metric so confusion is unlikely.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus alternatives like get_respiration_data or get_heart_rates. The description simply states what it does and provides no conditions, prerequisites, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_statsA

Get daily activity stats with curated essential metrics

Returns a summary of daily health and activity data including steps, calories, heart rate, stress, body battery, and sleep metrics.

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral transparency. It states that the tool returns a summary of daily health metrics, which is clear, but it does not disclose any potential side effects, data source nuances, or response formatting details. This is sufficient for a simple read operation, though not richly informative.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, using two sentences to state the purpose and list the included metrics, followed by a clear Args section. It is front-loaded with the primary action and avoids any redundant or unnecessary wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with one parameter and no output schema, the description is nearly complete. It specifies the input format and the type of data returned, leaving no critical gaps for the agent to make a correct call. Minor details like timezone handling are absent but not essential for the tool's basic use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only defines 'date' as a required string with no description. The tool description adds crucial format information ('YYYY-MM-DD'), which goes beyond the schema and helps the agent provide a valid input. This increases the semantic clarity of the parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'daily activity stats', and it enumerates the specific metrics included (steps, calories, heart rate, stress, body battery, sleep). This distinguishes it from sibling tools that retrieve only individual metrics (e.g., get_steps_data, get_body_battery), though it does not explicitly name or contrast with those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide explicit guidance on when to use this tool versus the many sibling tools. It implies a 'curated summary' but gives no direct instruction such as 'use this for a quick overview instead of calling multiple endpoints', leaving the agent to infer the intended use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_stats_and_bodyB

Get stats and body composition data

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, and the description does not disclose whether the operation is read-only, whether it has side effects, or any other behavioral characteristics. Since the name implies a GET, it is likely read-only, but this is not explicitly stated, and the lack of annotations leaves the burden on the description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and to the point, using a single sentence that directly states the purpose. There is no extraneous information or verbose wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains what data is retrieved (stats and body composition) but does not specify the structure or content of the response. Given the tool has no output schema, this could lead to uncertainty about the exact fields returned. However, for a simple getter, this level of detail may be acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, date, is clearly described with the expected format (YYYY-MM-DD). This provides sufficient semantic meaning for the parameter, though no additional constraints (e.g., required range) are mentioned.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (get) and the resource (stats and body composition data), distinguishing it from sibling tools like get_stats or get_body_composition by combining both. However, 'stats' is somewhat vague and could be interpreted as multiple data types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus the many sibling tools that retrieve similar data (e.g., get_stats, get_body_composition, get_user_summary). The description does not mention any conditions or preferences for choosing this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_steps_dataA

Get detailed steps data with 15-minute intervals

Note: This returns full interval data (~14KB). For a compact summary, use get_stats() which includes total_steps.

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses a key behavioral trait: the response is large (~14KB) and contains full interval data, which is useful for expectations and resource planning. It could also mention read-only or timezone handling, but for a simple read operation this is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief and front-loaded with the main purpose, followed by a practical note about payload size and an alternative. Every sentence adds value with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with one parameter, and the description covers the data granularity, payload size, and a sibling alternative. Since an output schema exists, return structure is already available, so nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter `date` has zero description coverage in the schema, but the description compensates fully by specifying the exact YYYY-MM-DD format. This is exactly the meaning an agent needs to call the tool correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns detailed steps data at 15-minute intervals, which is a specific verb, resource, and granularity. It also distinguishes this tool from the compact get_stats alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells agents to use get_stats() when a compact summary with total_steps is needed, providing a clear condition and alternative. This guides tool selection without ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_stress_dataA

Get full stress time-series data

Note: This returns detailed interval data (~35KB) including body battery. For a compact summary, use get_stress_summary().

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the response size (~35KB), that it returns interval-level detail, and that body battery is included. These are meaningful behavioral traits beyond the schema. It does not discuss errors or availability, but for a simple read operation with an output schema this is reasonably transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with the core purpose, and includes only useful additions: data size, contents, and a pointer to the summary alternative. The Args section is minimal and directly relevant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with an output schema, this description covers the purpose, the parameter format, the payload size, and the main alternative. Nothing essential for an agent to select and call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does so by specifying the date format ('YYYY-MM-DD') and implying the date identifies the day for which stress data is returned. This adds real meaning beyond the schema's bare 'date' string property.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: 'Get full stress time-series data.' It also distinguishes itself from get_stress_summary by noting it returns detailed interval data including body battery, so an agent can tell it apart from the closest sibling without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly provides an alternative and the condition for choosing it: 'For a compact summary, use get_stress_summary().' This gives clear when-to-use guidance relative to the primary sibling and implies this tool should be used when full detail is needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_stress_summaryA

Get stress summary with essential metrics (lightweight version)

Returns a compact summary (~400 bytes) instead of full time-series data (~35KB). Ideal for daily health checkups and LLM integrations.

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry behavioral disclosure. It clearly notes the compact output size (~400 bytes vs ~35KB), making the response behavior predictable, but it omits potential side effects, errors, or read-only semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is brief and to the point, with no redundant information. The byte-size comparison and ideal-use note add value without bloating the text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool, the description provides the necessary context: what it returns (compact summary), why it exists (lightweight), and the input format. It does not enumerate the specific metrics in the summary, but the core use is clear.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only defines 'date' as a required string with no property description, so the docstring's explicit 'YYYY-MM-DD' format is essential and compensates for the schema gap. Additional semantics like allowed date ranges or timezone are not covered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly identifies the resource (stress summary), the action (get), and distinguishes itself as a lightweight version returning compact data instead of full time-series. This differentiates it from sibling tools like get_stress_data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States ideal use cases (daily health checkups, LLM integrations) and explicitly contrasts with full time-series data, guiding when to prefer this tool. It does not name sibling alternatives explicitly, but the usage context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_training_effectB

Get training effect data for a specific activity

Args: activity_id: ID of the activity to retrieve training effect for

ParametersJSON Schema
NameRequiredDescriptionDefault
activity_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description does not mention side effects, permissions, or read-only nature; it only states the action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, with the main purpose first followed by the parameter explanation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the essential calling requirement (activity_id), and with an output schema present, no return details are needed, so it is complete for its simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description explains the single activity_id parameter meaning, though it lacks format or example details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves training effect data for a specific activity, but it does not explicitly differentiate it from sibling getter tools, so a 4 is appropriate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool compared to other activity-related getters; the description lacks alternative references.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_training_load_balanceA

Get Garmin's Load Focus — the distribution of the trailing-month training load across Aerobic Low, Aerobic High, and Anaerobic intensity bands, plus the system's feedback phrase (e.g. AEROBIC_HIGH_SHORTAGE, BALANCED, ANAEROBIC_SHORTAGE).

Use this to assess whether the athlete's training mix is balanced or deficient in a particular intensity band. Each band reports its load alongside Garmin's target range; a status of "below", "within", or "above" is computed from the load relative to that range.

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It discloses meaningful logic: each band reports load alongside a target range, and a status of below/within/above is computed relative to that range. It also explains the feedback phrase with examples. It does not explicitly state read-only behavior, but the 'get' verb and absence of mutation language make it reasonably inferable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded: a one-sentence definition, a one-sentence use case, a compact explanation of the output status, and a single parameter listing. Every sentence contributes necessary information without fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter getter with an output schema available, the description is complete enough. It covers what the tool returns, how status is derived, what the feedback phrase means, and the expected date format. The output schema presumably handles the full return structure, so the description does not need to re-document it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It provides the date format ('YYYY-MM-DD') and gives context by describing the trailing-month load distribution, implying that the date anchors the trailing month. This adds meaning beyond the bare schema field, though it could further clarify valid date ranges or what happens if no data exists.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Get Garmin's Load Focus,' and immediately defines the exact content: the distribution of training load across three intensity bands plus a feedback phrase. It is clearly distinct from siblings like get_training_load_trend because it names the specific metric and its components.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes an explicit use statement: 'Use this to assess whether the athlete's training mix is balanced or deficient in a particular intensity band.' It gives clear context for when to invoke the tool, though it does not mention alternatives or when not to use it, which prevents a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_training_load_trendA

Get the Performance Management Chart (CTL/ATL/TSB) over a date range.

Returns Chronic Training Load (CTL, 42-day fitness), Acute Training Load (ATL, 7-day fatigue), Training Stress Balance (TSB = CTL - ATL, form/freshness), and Acute:Chronic Workload Ratio (ACWR) per day. Use this to assess whether the athlete is building fitness, peaking, or accumulating too much fatigue.

Recommended range: 4-8 weeks. Maximum: 90 days.

Args: start_date: Start date in YYYY-MM-DD format end_date: End date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateYes
start_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and handles it well by explaining each metric's time window (42-day fitness, 7-day fatigue), the TSB formula, and the ACWR. It adds date-range limits (recommended 4-8 weeks, max 90 days) and per-day output semantics. It does not cover potential error conditions or data-availability behavior, but those are minor for a read-only trend query and the output schema covers return structure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well organized, front-loaded with the core purpose, followed by return details, usage guidance, and parameter documentation. Every sentence adds value and is skimmable, with formulas and ranges clearly highlighted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a two-parameter tool, a provided output schema, and no annotations, this description gives an agent everything needed to select and call the tool: purpose, metric definitions, use case, limits, and date format. The only minor omissions (error handling, inclusivity of end date) are unlikely to hinder correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description fully compensates by documenting both parameters with their required YYYY-MM-DD format. It also adds practical range constraints (recommended 4-8 weeks, maximum 90 days). This is exactly the semantic context the bare schema lacks.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses a specific verb 'Get' plus resource 'Performance Management Chart (CTL/ATL/TSB)' and enumerates the returned metrics (CTL, ATL, TSB, ACWR), clearly distinguishing it from sibling training-metric tools. It also defines the metrics in parenthetical terms, leaving no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use the tool: 'Use this to assess whether the athlete is building fitness, peaking, or accumulating too much fatigue.' It also gives a recommended range (4-8 weeks) and a maximum (90 days). It does not name alternative sibling tools or explicitly state when not to use it, so it stops just 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_training_plan_workoutsA

Compatibility alias for get_garmin_coach_workouts

Prefer get_garmin_coach_workouts for new requests. This legacy tool returns the same Garmin Coach/training-plan data; do not call both for one request. Adaptive plans expose only Garmin's currently generated window, typically the current week; future dates may return no workouts even while a plan is active.

Adaptive training plans typically expose workout_uuid; other plan families may expose numeric workout_id. Pass whichever identifier is present to get_workout_by_id. The returned count includes rest days.

Args: calendar_date: Reference date in YYYY-MM-DD format (returns week's workouts)

ParametersJSON Schema
NameRequiredDescriptionDefault
calendar_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden, and it delivers. It discloses the alias behavior, the fact that adaptive plans only expose the current generated week, the possibility that future dates return no workouts, and that the returned count includes rest days. These non-obvious behavioral details are highly useful to an agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact yet information-dense, with a clear alias statement, usage guidance, edge-case caveats, and an Args section. Every sentence contributes actionable information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema exists, return-value details are not needed. The description covers the legacy status, preferred alternative, date format, plan-window limitation, rest-day behavior, and how to route identifiers to get_workout_by_id. This is complete for correct selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only provides a parameter name and type with 0% description coverage. The description compensates fully by specifying the YYYY-MM-DD format, the reference-date semantics, and that it returns that week's workouts.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as a compatibility alias for get_garmin_coach_workouts and states it returns the same Garmin Coach/training-plan data. This precise resource and explicit sibling relationship distinguish it from the many sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly instructs agents to prefer get_garmin_coach_workouts for new requests, labels this tool as legacy, and warns against calling both for one request. This gives unambiguous when-to-use and 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_training_readinessB

Get training readiness data with curated metrics

Returns training readiness score and contributing factors.

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description does not disclose whether the operation is read-only, requires authentication, or has any side effects. The verb 'Get' implies non-destructive behavior, but this is not explicitly stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise, consisting of two short sentences. It immediately states the purpose and mentions the return value, with no extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description mentions the return value (score and contributing factors) but does not elaborate on the structure or meaning. Given the single parameter and straightforward nature of the data, this is adequate but leaves some ambiguity about what 'training readiness' specifically includes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description explicitly states the date format (YYYY-MM-DD) and implies that the parameter represents the date for which readiness data is requested. This provides sufficient meaning beyond the bare schema definition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'training readiness data', and mentions that it returns a score and contributing factors. However, it does not differentiate from sibling tools like 'get_morning_training_readiness' or 'get_training_status', which could lead to ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives. The description does not mention any specific use cases or scenarios where this endpoint is preferred over similar readiness or training tools.

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 training status with curated metrics

Returns comprehensive training status including load, VO2 max, recovery, and training readiness indicators.

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states that the tool 'returns' training status but does not explain any operational behavior, such as required permissions, whether the date is a single day or a range, how metrics are computed, or how the tool behaves with invalid or missing data. This is a real gap for an unannotated tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with the core purpose. The list of metrics is useful, but the opening phrase 'Get training status with curated metrics' is somewhat redundant with the 'Returns comprehensive training status' line, so it is not perfectly tight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema exists, so return structures are documented elsewhere. However, given the large sibling list and the lack of usage guidance, the description does not fully orient an agent on when this tool is the right choice or what distinguishes it from adjacent training metrics tools. It is adequate but has clear contextual gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 0%, so the description must compensate. It does add meaningful detail by specifying the date format as YYYY-MM-DD and naming the parameter. With only one parameter, this is nearly sufficient, though it could clarify whether the date represents a single day or a range endpoint.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the resource ('training status') and lists the included metrics: load, VO2 max, recovery, and training readiness. However, it does not explicitly differentiate from closely named siblings like get_training_readiness or get_training_load_trend, so the agent may struggle to pick this over similar tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus the many training-related siblings. The description is purely declarative and gives no exclusions, alternatives, or context to help an agent choose correctly among get_training_readiness, get_training_load_trend, and similar tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_unit_systemA

Get user's preferred unit system from profile

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. 'Get ... from profile' clearly signals a read-only, non-mutating operation, but it does not provide additional behavioral context such as default behavior, error cases, or authentication requirements. For a zero-parameter getter, this is acceptable but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler, front-loading the action and the resource. Every word contributes meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that the tool has zero parameters, and an output schema is present, the description is largely complete for invoking the tool correctly. It could add a note about which sibling tools might overlap, but that is not essential for this simple lookup.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters, so there is nothing for the description to clarify beyond the empty input schema. The baseline score of 4 applies because parameter semantics are trivially complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the action (get), the resource (user's preferred unit system), and the source (profile). This distinguishes it from broader profile-related siblings like get_user_profile and get_userprofile_settings by focusing specifically on unit system.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool should be used when the agent needs the user's preferred unit system, which is adequate for a simple getter. However, it does not explicitly state when not to use it or mention alternative tools that might also expose unit system data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_user_profileB

Get user profile information

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It only restates the 'get' action and gives no detail about response contents, permission requirements, or any other behavioral nuances, which is insufficient for meaningful transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence with no filler or redundancy. It is appropriately brief for a parameterless tool, though it could have added a clarifying clause about scope without much cost.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple and has an output schema, which reduces the need to explain return values. However, the description leaves the exact meaning of 'user profile information' ambiguous, especially given closely named siblings, so it is only minimally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the schema is empty, so there is nothing the description needs to add about parameter meaning. The baseline for no-parameter tools is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get user profile information' states a clear verb and resource, so an agent knows this is a read operation for a user profile. However, it does not differentiate from similar siblings like get_userprofile_settings or get_full_name, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance about when to use this tool versus the many sibling tools that also fetch profile-like data. There is no mention of alternatives, exclusions, or the intended context for this specific read call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_userprofile_settingsC

Get user profile settings

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The verb 'Get' implies a read-only operation, but with no annotations the description carries the full burden and does not explicitly disclose side effects, rate limits, or auth requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single direct sentence, concise and front-loaded with the operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple zero-parameter tool with an output schema, the one-line description is mostly adequate, but it does not clarify what 'profile settings' includes or how it differs from the sibling get_user_profile.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so schema coverage is trivially 100%; the baseline of 3 applies and no parameter documentation is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') and resource ('user profile settings'), but 'settings' is somewhat vague and it is not explicitly differentiated from sibling get_user_profile or get_unit_system.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like get_user_profile; there is no context, exclusions, or examples.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_user_summaryB

Get user summary data (compatible with garminconnect-ha)

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description does not disclose whether the operation is read-only, what side effects exist, or any error behavior. It only states the function name and parameter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, containing only the essential information without any redundant or verbose text. It is well-structured and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple getter, the description is adequate: it states the purpose and documents the parameter format. While it does not specify output details or the exact content of the summary, the presence of an output schema and the straightforward nature of the tool make this acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The date parameter is described with a specific format (YYYY-MM-DD), which adds useful meaning beyond the bare string type. However, it does not clarify what the date represents (e.g., activity date, log date) or whether a range is expected.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Get') and object ('user summary data'), and mentions compatibility with garminconnect-ha, which gives context. It is distinct from nearby getters like get_stats or get_daily_steps, but does not elaborate on what 'user summary' includes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no guidance on when to use this tool versus the many alternative getters. It lacks context on preferred scenarios, limitations, or how it differs from similar tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_vo2max_trendA

Get VO2 max trend over a date range.

Returns daily VO2 max estimates from Garmin's FirstBeat algorithm. Use this to track whether training is producing fitness gains over weeks or months. Flat or declining VO2 max over 4+ weeks suggests insufficient training stimulus or overreaching.

Note: VO2 max estimates are smoothed and update gradually — daily changes of <0.5 are within normal noise. Focus on the 4-6 week trend direction.

If historical values are unavailable, the current profile estimate is returned separately and is not represented as a historical trend point.

Recommended range: 4-12 weeks. Maximum: 90 days.

Args: start_date: Start date in YYYY-MM-DD format end_date: End date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateYes
start_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries full behavioral burden and does so well: it discloses smoothing, gradual updates, normal noise threshold (<0.5), trend-window recommendation, and how missing historical values are handled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence earns its place: core purpose is front-loaded, followed by interpretation guidance, behavioral caveats, range limits, and argument format. No filler or redundant restatement of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists, the description doesn't need to explain return shape. It covers behavior, edge cases, valid ranges, and usage context, making it complete for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It adds YYYY-MM-DD format for both parameters and useful range constraints (recommended 4-12 weeks, max 90 days). It doesn't mention inclusivity or date ordering, but the names and date-range framing make the core semantics clear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Get VO2 max trend over a date range.' It explicitly names the data source (Garmin's FirstBeat algorithm) and the use case, which clearly distinguishes it from sibling trend tools like get_hrv_trend or get_training_load_trend.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear when-to-use context: track fitness gains over weeks or months, with interpretation guidance for flat/declining VO2 max. It does not explicitly name alternative tools or list when-not-to-use conditions, but the use case is specific enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_weekly_intensity_minutesA

Get weekly intensity minutes data aggregates

Returns weekly intensity minutes (moderate and vigorous) for the specified number of weeks ending at end_date.

Args: end_date: End date in YYYY-MM-DD format weeks: Number of weeks to fetch (default 4, max 52)

ParametersJSON Schema
NameRequiredDescriptionDefault
weeksNo
end_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the transparency burden. It does state that the tool returns aggregated data and includes moderate/vigorous intensity, but it does not disclose read-only status, edge cases, or behavior such as how end_date is handled at boundaries. It is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: it states the purpose first, then gives return details and parameter explanations. The Args section is directly useful and there is little wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read-only getter with an output schema present, the description covers the essential semantics: what is returned, the date anchor, and the valid weeks range. Nothing critical is missing for an agent to invoke this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, but the description compensates fully by specifying end_date format (YYYY-MM-DD) and weeks semantics including default (4) and max (52). This adds meaning well beyond the bare schema fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource ('weekly intensity minutes'), distinguishes moderate and vigorous data, and specifies the time window ('number of weeks ending at end_date'). This clearly differentiates it from the many sibling getter tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when weekly intensity minutes are needed, but it does not explicitly state when to choose this tool over alternative getters or mention any exclusions. Context is clear but no dedicated usage guidance or alternative routing is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_weekly_stepsA

Get weekly step data aggregates

Returns weekly step totals for the specified number of weeks ending at end_date.

Args: end_date: End date in YYYY-MM-DD format weeks: Number of weeks to fetch (default 4, max 52)

ParametersJSON Schema
NameRequiredDescriptionDefault
weeksNo
end_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral transparency. It clearly indicates a read-only aggregation operation by saying it 'Returns weekly step totals'. It does not mention edge cases like week-boundary handling or invalid inputs, but these are not critical for a simple read query.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: a one-line summary, a clarifying sentence, and a short args list. No unnecessary words or redundant information are present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description provides enough context for typical use, covering the query target and all parameters. It does not describe the response structure, but an output schema is indicated as present, and the tool is a simple aggregate query.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description fully compensates for the missing schema descriptions by explaining end_date as a YYYY-MM-DD date and weeks as the number of weeks with default 4 and max 52. Both parameters are given meaningful, actionable semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific verb 'Get' and the resource 'weekly step data aggregates', with a precise scope of weekly step totals for a specified number of weeks ending at end_date. This makes it readily distinguishable from daily step or raw step data siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies use when weekly aggregate step totals are needed rather than daily step data, especially through the 'weekly step totals' and 'weeks' parameters. However, it does not explicitly contrast itself with get_daily_steps or get_steps_data, leaving the differentiation implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_weekly_stressC

Get weekly stress data aggregates

Returns weekly stress values for the specified number of weeks ending at end_date.

Args: end_date: End date in YYYY-MM-DD format weeks: Number of weeks to fetch (default 4, max 52)

ParametersJSON Schema
NameRequiredDescriptionDefault
weeksNo
end_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations provided, so the description must carry the burden of disclosing behavioral traits. The description only states what the tool returns ('Returns weekly stress values') and does not explicitly mention whether it is read-only, has side effects, or requires specific permissions. Since it lacks any explicit behavioral disclosure, the transparency is minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, with a one-line summary followed by a clearly organized argument list. It avoids unnecessary detail and front-loads the core purpose. The structure is easy to parse and directly addresses the tool's functionality.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that the tool has an output schema (as indicated by 'Has output schema: true'), the description does not need to explain the return structure. It provides the essential information: what the tool does, the parameters, and their meanings. It is complete for the typical use case, though it lacks examples or edge-case handling, which are not strictly necessary here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description enriches both parameters: 'end_date' is explained as 'End date in YYYY-MM-DD format' and 'weeks' as 'Number of weeks to fetch (default 4, max 52)'. This goes beyond the bare schema by providing format, defaults, and constraints, giving the agent meaningful semantic information. The coverage is complete for the two parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Get weekly stress data aggregates' and elaborates that it 'Returns weekly stress values for the specified number of weeks ending at end_date.' This specifies the resource (stress data) and the scope (weekly aggregates), making the purpose obvious. It does not explicitly differentiate from sibling stress tools like get_stress_summary or get_stress_data, but the wording is specific enough to suggest a distinct aggregate view.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention any conditions, preferences, or contrasting scenarios with other stress-related tools. Without any usage direction, an agent cannot determine when this tool is the best choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_weigh_insA

Get weight measurements between specified dates

Args: start_date: Start date in YYYY-MM-DD format end_date: End date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateYes
start_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. The verb 'Get' implies a read-only operation and the date range is clearly scoped, but the description does not explicitly state that no data is modified, what granularity of data is returned, or whether both dates are inclusive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is stated in a single front-loaded sentence, followed by a compact Args block with no filler. Every sentence earns its place, and the structure is easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and only two simple required parameters, the description provides the essential calling contract. It could be more complete by clarifying date-boundary behavior or differentiating from get_daily_weigh_ins, but these are minor gaps for a simple retrieval tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description compensates by explicitly defining both parameters and their exact YYYY-MM-DD format. It does not address inclusivity or ordering, but the parameter names and required flags already convey the basic contract.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get'), a clear resource ('weight measurements'), and a date-range scope ('between specified dates'). It does not explicitly distinguish itself from sibling tools like get_daily_weigh_ins, but the core purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives such as get_daily_weigh_ins, get_stats_and_body, or get_progress_summary_between_dates. There is no mention of exclusions, prerequisites, or preferred contexts.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_workout_by_idA

Get detailed information for a specific workout

Returns workout details including segments and step structure.

Accepts either:

  • Numeric workout ID (from get_workouts, get_scheduled_workouts, or training-plan families that expose workout_id)

  • Workout UUID (from adaptive Garmin Coach/training-plan workouts)

Rest-day UUIDs can resolve to a minimal record without a workout name or segments.

Args: workout_id: Workout ID (numeric) or UUID (for training plan workouts)

ParametersJSON Schema
NameRequiredDescriptionDefault
workout_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses an important behavioral nuance: 'Rest-day UUIDs can resolve to a minimal record without a workout name or segments.' This goes beyond a simple 'get' and informs the caller of an edge case. Since annotations are absent, this added detail improves transparency, though it doesn't cover error responses or other potential side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: a one-sentence purpose, a clear breakdown of the two ID types, and a brief note on rest-day behavior. No redundant or extraneous information is present, and the key details are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and the tool's relative simplicity, the description is complete. It explains what data is returned (segments, step structure), the accepted parameter formats, and the rest-day exception. The output schema handles detailed return types, so no further elaboration is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only defines workout_id as anyOf integer/string with no description, so the description carries the full burden. It adds significant meaning by explaining that numeric IDs come from specific sources (e.g., get_workouts, scheduled workouts) and UUIDs from adaptive coach/training-plan workouts, and it clarifies the special behavior for rest-day UUIDs. This fully compensates for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get detailed information for a specific workout' and specifies it returns segments and step structure. It distinguishes from sibling tools by focusing on retrieval by ID rather than listing or scheduling workouts. The mention of both numeric IDs and UUIDs further clarifies its scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides useful context on when to use this tool by explaining the origin of accepted IDs: numeric IDs from get_workouts, get_scheduled_workouts, or training-plan families, and UUIDs from adaptive Garmin Coach/training-plan workouts. While it doesn't explicitly state 'use this when you have a workout ID' or contrast with download_workout, the guidance is clear enough for most cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_workoutsA

Get all workouts with curated summary list

Returns a count and list of workout summaries with essential metadata only. For detailed workout information including segments, use get_workout_by_id.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description indicates a read-only retrieval operation returning a summary list; no side effects are mentioned. While not explicitly stating it is non-destructive, the behavior is clear from the 'get' action and return description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with two short sentences that convey purpose, return type, and the alternative for detailed data.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Description gives enough context for a summary list tool and points to the detailed variant. It does not enumerate the exact summary fields, but 'essential metadata only' is sufficient given the existence of a detailed counterpart.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there is no parameter semantics to document. The description is complete in this regard.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool gets all workouts and returns a curated summary list with count and essential metadata. It distinguishes itself from get_workout_by_id, which provides detailed workout information.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly directs users to get_workout_by_id when detailed workout information including segments is needed, making the appropriate use case clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

log_custom_foodA

Log a food item to a meal on a date

Adds a food entry to the nutrition log. The meal is determined automatically by matching meal_time against each meal's startTime/endTime window; falls back to SNACKS if no window matches.

Food sources:

  • "GARMIN" (default): user's custom food library. Use get_custom_foods to find food_id and serving_id.

  • "FATSECRET": branded/catalog food from FatSecret. Use search_foods to find food_id and serving_id. Pass the source value from the search_foods result (e.g. "FATSECRET").

Garmin custom food IDs are 32-char hex UUIDs; FatSecret IDs are numeric strings (e.g. "4132350"). Passing the wrong source for a given food_id returns a 400 from Garmin.

Args: meal_date: Date in YYYY-MM-DD format meal_time: Time in HH:MM:SS format (e.g. "12:30:00", account timezone) food_id: Food ID from get_custom_foods (GARMIN) or search_foods (FATSECRET) serving_id: Serving ID from get_custom_foods or search_foods serving_qty: Number of servings (default 1) source: Food namespace — "GARMIN" (default) or "FATSECRET"

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceNoGARMIN
food_idYes
meal_dateYes
meal_timeYes
serving_idYes
serving_qtyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of explaining behavior. It discloses that the operation adds a food entry, describes the automatic meal determination with SNACKS fallback, and specifies the 400 error condition when the wrong source is passed. This is more than minimal behavioral context, though it does not mention permissions or reversibility.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized with a summary, explanatory paragraphs, and a clear Args list. It is slightly repetitive in mentioning the source of food IDs, but the structure makes it easy to scan and the length is appropriate for the complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers all necessary invocation context: how meal time maps to meals, how to obtain food/serving IDs, the meaning of the source parameter, and potential error behavior. An output schema exists, so omitting return details is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The Args section provides thorough explanations for all six parameters, including date/time formats, defaults, and the exact origin of food_id and serving_id. Since the schema has no descriptions, this fully compensates and leaves no ambiguity about parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Log a food item to a meal on a date' and elaborates that it adds a food entry to the nutrition log. It distinguishes itself from sibling tools by specifying the food sources (GARMIN/FATSECRET) and the need for food/serving IDs, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides concrete usage instructions, telling users to call get_custom_foods or search_foods to obtain the required IDs and explaining the source parameter. It does not explicitly contrast with the similar log_food sibling, but the prerequisites and source handling give sufficient guidance for when to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

log_foodA

Quick-add a food entry with macro values to the nutrition log

Logs food directly by name and macros without requiring a food ID. Uses Garmin's Quick Add feature. The meal is determined automatically by matching meal_time against each meal's startTime/endTime window; falls back to SNACKS if no window matches.

Args: meal_date: Date in YYYY-MM-DD format name: Display name for the food entry calories: Calories (kcal) carbs: Carbohydrates in grams protein: Protein in grams fat: Fat in grams meal_time: Time in HH:MM:SS format (account timezone)

ParametersJSON Schema
NameRequiredDescriptionDefault
fatYes
nameYes
carbsYes
proteinYes
caloriesYes
meal_dateYes
meal_timeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full disclosure burden, and it delivers meaningful context: it reveals the non-obvious meal-determination logic (matching meal_time against meal startTime/endTime windows, falling back to SNACKS) and the timezone caveat for meal_time. For an unannotated mutation tool it could still disclose more (e.g., whether repeated calls duplicate entries, or reversibility), but the critical hidden behavior 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the purpose, followed by one mechanism sentence, then a compact args list. Each line in the Args block adds format or unit information the schema lacks, so it earns its place. Slightly longer than strictly necessary, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-required-parameter tool with 0% schema coverage and zero annotations, the description is notably complete: it covers purpose, mechanism, all parameter formats/units, and the non-obvious meal-window fallback. The output schema covers return-value expectations, so that gap is not the description's fault. The only real absence is explicit guidance on when to prefer sibling tools, which is also reflected in the usage_guidelines score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description fully compensates by documenting all 7 parameters with useful semantics: exact formats ('YYYY-MM-DD', 'HH:MM:SS'), units (kcal, grams), and the timezone qualifier on meal_time. It also explains how meal_time behaviorally maps to meal selection, which the bare schema cannot convey. No parameter is left underspecified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Quick-add a food entry with macro values to the nutrition log.' It further differentiates from siblings by stating it logs 'directly by name and macros without requiring a food ID,' which clearly separates it from log_custom_food and search_foods. The purpose is unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool ('without requiring a food ID' and 'Uses Garmin's Quick Add feature') and explains the automatic meal assignment behavior. However, it never explicitly names alternatives (e.g., log_custom_food for ID-based logging) or states when-not-to-use conditions. The routing guidance is implicit rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_gear_from_activityA

Remove gear association from an activity

Unlinks a specific piece of gear from an activity.

Args: activity_id: ID of the activity gear_uuid: UUID of the gear to remove

ParametersJSON Schema
NameRequiredDescriptionDefault
gear_uuidYes
activity_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It clarifies that the operation unlinks rather than deletes gear, which is useful, but it does not disclose side effects, idempotency, error behavior, or whether the gear must already be associated with the activity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded, but the first two sentences are largely redundant ('Remove gear association' vs 'Unlinks a specific piece of gear'). The Args section is useful and compact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool with an output schema, the description covers the core action and parameters. However, it lacks usage guidance and behavioral details such as prerequisites or failure modes, leaving some gaps for an agent to infer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. The Args section explains activity_id as the activity's ID and gear_uuid as the UUID of the gear to remove, adding meaning beyond the bare schema titles. It could further specify where to obtain these values, but it is adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Remove'/'Unlinks') and a clear resource ('gear association from an activity'), making the operation unambiguous. It is naturally distinguished from sibling tools like add_gear_to_activity and get_activity_gear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is implied by the action ('unlink gear from an activity'), but there is no explicit guidance about when to choose this over alternatives such as add_gear_to_activity or get_activity_gear. No exclusions or prerequisites are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

request_reloadC

Request reload of epoch data

Args: date: Date in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It says only 'Request reload' without explaining side effects, whether this is a write operation, whether it is asynchronous, whether it is idempotent, or what it actually changes. This is insufficient for an operation that sounds like it triggers system-side reload behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise and front-loaded: the operation is stated first, followed by the argument specification. There is no filler or redundant content, and the format line earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and a side-effect-like operation, the description is too thin. It does not cover what epoch data means, the consequences of reloading, or any prerequisites or caveats. An output schema exists, so return values are covered, but the operational context is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the sole parameter, so the description must compensate. It does provide the required format ('Date in YYYY-MM-DD format'), which is useful beyond the schema's bare type string. However, it does not explicitly explain the semantic role of the date (e.g., the epoch period to reload), leaving some inference to the agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a specific action ('Request reload') and a clear resource ('epoch data'), so an agent can tell this is an operation that triggers a reload rather than a query or update. It is not a tautology and stands out from sibling getters and setters, but 'epoch data' is domain-vague and not elaborated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement about when to use this tool versus alternatives, no conditions for calling it, and no exclusions. The description only states the operation and its argument, leaving the agent to infer appropriate usage from the tool name and context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

schedule_weekA

Schedule a list of workouts for the week in a single call.

Idempotent: if a workout is already scheduled for that date, it is reported as already scheduled and the POST is skipped (avoids duplicating calendar entries).

Args: week: List of dicts with keys: date (YYYY-MM-DD), workout_id (int)

ParametersJSON Schema
NameRequiredDescriptionDefault
weekYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses idempotency and the behavior of skipping already-scheduled workouts, providing clear expectations for side effects despite no annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise two-sentence description plus parameter details; structure is efficient and front-loaded with purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Provides sufficient context for correct usage given the large sibling set, including purpose, parameter details, and idempotency behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description clearly defines the 'week' parameter as a list of dicts with required keys and types, which is more informative than the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it schedules a list of workouts for the week in a single call, distinguishing it from single or non-week scheduling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implicitly indicates when to use (for a week's batch) and describes idempotent behavior, though it does not explicitly reference sibling tools like schedule_workout or schedule_workouts.

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 calendar date

This adds an existing workout from your Garmin workout library to your Garmin Connect calendar on the specified date.

Idempotent: if the workout is already scheduled for that date, this is a no-op that reports success without creating a duplicate entry.

Args: workout_id: ID of the workout to schedule (get IDs from get_workouts) calendar_date: Date to schedule the workout in YYYY-MM-DD format

ParametersJSON Schema
NameRequiredDescriptionDefault
workout_idYes
calendar_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses that the operation is idempotent (no-op on duplicate) and that it 'reports success'. It also implies the action modifies the calendar. However, it does not mention potential failure modes (e.g., invalid workout ID or date format issues) or side effects beyond scheduling, so some behavioral traits remain undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: a one-sentence summary, a brief explanatory line, a note about idempotency, and a clear list of arguments. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the straightforward nature of the tool, the description is complete: it states the purpose, required parameters (with formats), and idempotency. The output schema exists, so return details are not required. No critical context (e.g., prerequisites beyond having a valid workout ID) is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no per-parameter descriptions (coverage 0%), but the tool description compensates with an explicit 'Args' section that explains 'workout_id: ID of the workout to schedule (get IDs from get_workouts)' and 'calendar_date: Date to schedule the workout in YYYY-MM-DD format'. This fully covers the meaning and format of both parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Schedule a workout to a specific calendar date' and explains that it 'adds an existing workout from your Garmin workout library to your Garmin Connect calendar on the specified date.' This is a specific verb and resource, and it distinguishes itself from sibling tools like schedule_workouts (plural) by focusing on a single workout scheduling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context for use: it tells the agent that it takes an existing workout ID and a date, and it even directs to get IDs from get_workouts. It also mentions idempotency, which is helpful for deciding when to call. However, it does not explicitly state when to prefer this over schedule_workouts or other scheduling tools, though the singular vs plural distinction is implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

schedule_workoutsA

Schedule multiple workouts to specific calendar dates

This adds workouts to your Garmin Connect calendar in a single call. Each item can either reference an existing workout by ID, or provide inline workout_data to upload-and-schedule in one step.

Args: schedules: List of workout schedules, each with: - calendar_date (str): Date to schedule the workout in YYYY-MM-DD format (required) - workout_id (int): ID of an existing workout to schedule (required unless workout_data is provided) - workout_data (dict): Inline workout JSON to upload first, then schedule (optional). When provided, workout_id is not required. Uses the same structure and target-value rules as upload_workout.

Examples: Schedule existing workouts by ID: [{"workout_id": 123456, "calendar_date": "2024-01-15"}, {"workout_id": 789012, "calendar_date": "2024-01-17"}]

Upload and schedule inline:
[{"calendar_date": "2024-01-15", "workout_data": {"workoutName": "Easy Run", ...}},
 {"workout_id": 789012, "calendar_date": "2024-01-17"}]
ParametersJSON Schema
NameRequiredDescriptionDefault
schedulesYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It explains the high-level behavior (adds to calendar, supports inline upload), but it does not mention potential side effects like partial failures, duplicate handling, whether inline uploads create permanent workouts, or any permissions. This is decent but lacks depth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a summary, a compact Args section using bullet points, and clear examples. It is succinct without unnecessary jargon, and the key information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core use cases, parameter constraints, and provides examples. However, it leaves some edge cases ambiguous, such as what happens if both workout_id and workout_data are provided in the same object, and it does not address error handling or return values (though output schema exists, which mitigates the latter). Overall it is fairly complete for basic usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema is minimal (just an array of objects with additionalProperties), but the description thoroughly explains each parameter: calendar_date required, workout_id required unless workout_data is provided, workout_data optional with structure and rules referencing upload_workout. The mutual exclusivity is clear and examples support the semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool 'Schedule multiple workouts to specific calendar dates' and explains it adds workouts to the Garmin Connect calendar in a single call. It distinguishes itself from sibling tools like schedule_workout by explicitly being plural and batch-oriented, and it also clarifies two modes (reference existing or inline upload).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool (for multiple workouts, single call) and provides examples, but it does not explicitly contrast with schedule_workout or state when not to use it. The alternative is only implied by the plural name and 'single call' wording, not directly named with a condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_foodsA

Search Garmin's general food catalog (FatSecret + Garmin custom foods)

Searches across the entire food catalog including FatSecret-sourced branded and generic foods, not just the user's Garmin custom foods. Use this to find branded packaged foods by name before logging them.

Returns food_id, source, name, brand, and all available servings with macros. The source field ("FATSECRET" or "GARMIN") and food_id together identify the right routing for log_custom_food — pass both to log_custom_food's food_id and source parameters respectively.

For the user's own custom foods only, use get_custom_foods instead.

Args: query: Food name or brand to search for (e.g. "Cheerios", "Greek yogurt") start: Starting index for pagination (default 0) limit: Maximum number of results per page (default 20)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
startNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the search scope, the source field values ('FATSECRET' or 'GARMIN'), and the returned fields. It doesn't mention rate limits or error behavior, but for a search operation the core behavioral traits are well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with a one-line summary, then expands into scope, return semantics, routing, and parameter details. Every sentence adds value, and the Args section is clearly structured. No redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers selection (when to use vs get_custom_foods), invocation (all parameters), output semantics (returned fields and source values), and downstream usage (passing food_id and source to log_custom_food). It is complete for an agent to select and call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must fully compensate. It does: query is explained as a food name or brand with examples, start is described as the pagination starting index, and limit as the maximum results per page. Defaults are also stated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Search Garmin's general food catalog (FatSecret + Garmin custom foods)'. It clearly distinguishes itself from get_custom_foods by stating it searches the entire catalog, not just the user's custom foods.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says to use this tool to find branded packaged foods by name before logging them, and explicitly names get_custom_foods as the alternative for the user's own custom foods. It also explains how results route into log_custom_food, giving clear when-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_activity_descriptionA

Set or update the free-text description (notes) of an activity.

This is the notes field shown on the activity page — useful for recording how a session felt, kit used, conditions, niggles, etc. Pass an empty string to clear an existing description.

Args: activity_id: ID of the activity to update description: New description text (empty string clears it)

ParametersJSON Schema
NameRequiredDescriptionDefault
activity_idYes
descriptionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the behavioral disclosure burden. It clearly states this is a mutation ('Set or update'), identifies the target field, and documents the important empty-string-clearing behavior. It does not mention auth or validation, but for a simple field setter 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence front-loads the core purpose, followed by useful usage context and the critical clearing behavior. The Args section is necessary given the schema's lack of descriptions. It is slightly redundant in places but remains well-organized and appropriately sized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter setter, the description covers purpose, usage context, parameter semantics, and clearing behavior. An output schema exists, so return values are covered elsewhere. Missing auth/error details are minor for this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. The Args section explains both parameters: activity_id is the ID of the activity to update, and description is the new text with empty-string clearing semantics. This adds real meaning beyond the bare schema, though it omits constraints like max length.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Set or update the free-text description (notes) of an activity.' It clearly identifies this as the notes field, distinguishing it from sibling tools like set_activity_name and set_activity_type without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool, such as recording how a session felt, kit used, conditions, and niggles. It does not explicitly name alternatives or exclusions, but the purpose is distinct enough that an agent can select it correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_activity_event_typeA

Set the event type of an activity.

Event type categorises the activity's purpose. Valid keys: race, recreation, specialEvent, training, transportation, touring, geocaching, fitness, uncategorized.

Args: activity_id: ID of the activity to update event_type: Target event type key (e.g. 'race', 'training')

ParametersJSON Schema
NameRequiredDescriptionDefault
event_typeYes
activity_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the full burden of explaining behavior. It only says 'Set', implying a mutation, but does not mention side effects, return values, or error handling. The valid values list is helpful but insufficient to fully understand the effect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, with a clear opening line, a brief explanation of valid keys, and a straightforward argument list. There is no unnecessary fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is a simple setter with two parameters, and the description covers the essentials. However, it does not mention the output or success/failure behavior, which would be valuable given the tool's mutation nature. The presence of an output schema helps, but the description leaves some context to be inferred.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaning beyond the schema by explaining activity_id as 'ID of the activity to update' and event_type as 'Target event type key' with a list of valid values. This compensates for the schema's lack of parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function with the verb 'Set' and the resource 'event type of an activity.' It also lists all valid values for the event_type parameter, leaving no ambiguity about its purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit guidance on when to use this tool versus alternatives like set_activity_type or set_activity_name. It does not mention conditions, prerequisites, or scenarios where this setter is preferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_activity_feelA

Set how an activity felt ('How did you feel?').

Mirrors Garmin Connect's 5-point feel rating, stored as one of: 0 = very tired / poor 25 = tired 50 = normal 75 = good 100 = strong Higher is better.

Args: activity_id: ID of the activity to update feel: One of 0, 25, 50, 75, 100

ParametersJSON Schema
NameRequiredDescriptionDefault
feelYes
activity_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the behavioral burden. It discloses that this is a mutation ('set'), and it explains the feel value semantics with labels and 'higher is better.' However, it does not mention whether existing feel values are overwritten, whether the activity must exist first, or any side effects. The presence of an output schema helps cover the return-value aspect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is tight and well-structured: a one-line primary action, a compact scale table, and a short Args section. Every sentence earns its place, and the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter setter, the description is essentially complete: it identifies the resource, the accepted values, and the parameter meanings. The output schema covers return details. The only notable omission is guidance on how this tool relates to perceived effort and other activity-editing tools, but that is not required for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and feel has no enum, so the description fully compensates. It defines activity_id as 'ID of the activity to update' and specifies exactly the valid feel values (0, 25, 50, 75, 100) with human-readable meanings. This gives an agent everything needed to construct valid arguments.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: 'Set how an activity felt' with an explicit 5-point scale. The Garmin Connect feel-rating mapping distinguishes it from other activity setters, though it does not explicitly contrast it with set_perceived_effort or other sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: use this tool to record how an activity felt via the Garmin feel scale. There is no explicit when-to-use or when-not-to-use guidance, and no alternatives are named, but the purpose is clear enough for an agent to infer the intended context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_activity_nameA

Set or update the name of an activity.

Args: activity_id: ID of the activity to update activity_name: New activity name

ParametersJSON Schema
NameRequiredDescriptionDefault
activity_idYes
activity_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full burden of behavioral disclosure. It only states that the name is set/updated, without mentioning side effects, whether the activity must already exist, or what happens on failure. This is minimal transparency for a mutating operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: a one-line purpose statement followed by an Args block. There is no filler, and the core action is front-loaded. Every sentence serves a clear function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter setter, the description covers the operation and both arguments sufficiently. An output schema exists, so return values need not be described. The main gap is the lack of usage context relative to sibling tools, but basic invocation is fully supported.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description's Args section provides meaning for both parameters: activity_id is the activity to update and activity_name is the new name. This compensates for the bare schema titles, though it does not elaborate on validation rules or accepted formats.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Set or update') and a clear resource ('the name of an activity'), which is distinct from sibling tools like set_activity_type, set_activity_description, or set_activity_event_type. An agent can immediately identify what attribute this tool modifies without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus the many sibling set_* tools. The description does not mention selection criteria, prerequisites, or exclusions. Usage must be inferred solely from the tool name and parameter names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_activity_typeA

Change the activity type (sport) of an activity.

Useful for reclassifying a mislabelled activity, e.g. flipping a run logged as 'trail_running' to 'running', or a 'treadmill_running' walk to 'treadmill_walking'. Call get_activity_types to see all valid type keys.

Args: activity_id: ID of the activity to update type_key: Target activity type key (e.g. 'running', 'trail_running', 'treadmill_running', 'cycling', 'lap_swimming')

ParametersJSON Schema
NameRequiredDescriptionDefault
type_keyYes
activity_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the burden of disclosing behavior. It clearly identifies the operation as a mutation and adds a useful constraint that type_key must come from get_activity_types. However, it does not address permissions, reversibility, failure behavior, or side effects on related activity data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: a short action statement, a purposeful rationale with examples, a cross-tool reference, and a compact Args block. Every sentence adds value and the explanation is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter setter with an output schema present, the description covers the core requirements: what the tool does, when to use it, and how to find valid values. It leaves some edge-case behavior implicit, but an agent has enough information to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does: activity_id is explained as the ID of the activity to update, and type_key is explained with concrete examples. It could be stronger by noting how to obtain activity_id, but the provided semantics are sufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: 'Change the activity type (sport) of an activity.' It also distinguishes itself from sibling setters by focusing specifically on the sport/type field, with examples that make the operation unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: it is useful for reclassifying mislabelled activities, and it directs the agent to call get_activity_types for valid keys. It does not explicitly name alternative tools or state when not to use it, but the usage context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_blood_pressureC

Set blood pressure values

Args: systolic: Systolic pressure (top number) diastolic: Diastolic pressure (bottom number) pulse: Pulse rate notes: Optional notes

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNo
pulseYes
systolicYes
diastolicYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It identifies the operation as 'Set' but does not clarify whether this appends a new reading or overwrites an existing one, what units are expected, or what happens on invalid input. These are material unknowns for a health-data write operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact with a clear front-loaded purpose line followed by a structured args list. Every sentence earns its place, and the arg documentation is not redundant given the schema's 0% description coverage. Minor room for improvement: the arg list could be folded into prose or trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (4 scalar params, no nesting) and an output schema exists, so return-value documentation is not needed. The main gaps are units, the append-vs-replace write semantics, and expected value ranges—each of which an agent would want to know before recording health data. Adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds useful disambiguation ('top number' vs 'bottom number') and marks notes as optional, which the bare schema titles do not convey. However, it omits units (mmHg, bpm), valid ranges, and any context on how values are interpreted, so the compensation is only partial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Set') and resource ('blood pressure values'), clearly identifying the operation. It is not a tautology and the set/get contrast with the sibling get_blood_pressure makes the intent unmistakable, though the description does not explicitly name that sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives. There is no mention that this tool records a new blood pressure reading as opposed to fetching existing data via get_blood_pressure, nor any note about prerequisites (e.g., user authorization). The intended use is implied only by the tool's name, not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_fit_download_dirA

Set and persist the default directory for downloaded activity files.

Stores the absolute path in a small JSON config file (~/.garminconnect_fit_config.json, overridable via GARMIN_FIT_CONFIG) so download_activity_file can save files without asking again.

Args: path: Directory where activity files (.fit/.gpx/.tcx/.csv) are saved. Pass the current working directory to keep files where the server runs.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of explaining side effects. It clearly states that the tool stores the path in a JSON config file and affects future downloads, which is transparent about persistence behavior. It does not mention potential overwrite or error behavior, but those are not critical for this simple setter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, with a clear purpose statement followed by implementation detail and parameter guidance. Every sentence adds useful information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple state-setting tool, the description provides all necessary context: what it does, where it persists, and how it affects another tool. No return schema details are needed for this action, and the description is sufficient for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although the schema provides no field description, the tool description fully covers the only parameter ('path') by explaining that it is a directory and offering recommended usage. This gives the agent complete semantic understanding of the argument.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('set and persist') and clearly identifies the resource ('default directory for downloaded activity files'). It is distinct from sibling tools, which mostly retrieve data, and it explicitly names the dependent tool download_activity_file.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains that this tool persists the directory so download_activity_file can save files without asking, giving clear context for when to use it. It also provides practical guidance to pass the current working directory, though it could be more explicit about sequencing relative to download_activity_file.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_nutrition_daily_settingsA

Update daily nutrition goals (calorie target and macronutrient targets).

Reads the current settings for the date, applies the supplied overrides, and writes the merged result back. Only the fields you provide are changed; omitted fields keep their existing values.

Garmin stores macros as grams. The calorie goal should match 4carbs + 4protein + 9*fat to within a small rounding margin — Garmin accepts minor mismatches but will silently correct large discrepancies.

Args: date: Date in YYYY-MM-DD format (settings are typically set once and inherited across days, but Garmin accepts per-day overrides) calorie_goal: Daily calorie target in kcal carbs_grams: Daily carbohydrate target in grams fat_grams: Daily fat target in grams protein_grams: Daily protein target in grams

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
fat_gramsNo
carbs_gramsNo
calorie_goalNo
protein_gramsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description fully discloses side effects: it reads current settings, writes merged results, and notes that Garmin may silently correct large calorie-macro discrepancies. This gives the agent a realistic expectation of behavior beyond a simple set.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear intro, behavioral notes, and an Args list. It is slightly verbose due to the calorie-macro consistency explanation, but that information is essential for correct usage, so the length is justified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Provides enough context to call the tool correctly: explains merge behavior, parameter semantics, and a critical consistency rule. Does not mention return value or error conditions, but an output schema exists (not shown) and the operation is straightforward; still, a brief note on expected response would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description's Args section adds meaningful semantics for all 5 parameters: explains date format and inheritance behavior, units for calorie_goal (kcal), and units for macros (grams). This fully compensates for the schema's lack of descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb 'update' and resource 'daily nutrition goals' (calorie and macronutrient targets). Distinguished from sibling getter tools like get_nutrition_daily_settings by its setter nature and explicit description of the update behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear usage instructions: mentions the merge behavior (reads current settings, applies overrides, writes merged result) and explains that only provided fields are changed, omitted fields keep existing values. Also includes important consistency note about calorie and macro relationships, guiding correct usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_perceived_effortA

Set the perceived effort (RPE) for an activity.

Mirrors Garmin Connect's 'Perceived Effort' rating on a 0-10 scale, where 0 clears the rating. Internally Garmin stores this multiplied by 10 (so RPE 7 is stored as 70); this tool handles the conversion.

Args: activity_id: ID of the activity to update rpe: Perceived effort from 0 to 10 (0 clears the rating)

ParametersJSON Schema
NameRequiredDescriptionDefault
rpeYes
activity_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It goes beyond a bare 'sets RPE' by explaining the 0-10 scale, that 0 clears the rating, and that Garmin stores the value multiplied by 10 while the tool handles conversion. It does not mention mutation side effects or permissions, but the setter behavior and clearing semantics are well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core action. Every sentence earns its place: the scale, the clear-rating behavior, the internal conversion detail, and the parameter list are all relevant and free of filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple and the two required parameters are fully described. An output schema exists, so return-value details are not required. Minor gaps such as explicit alternative-routing guidance and potential validation behavior prevent a perfect score, but the description is otherwise complete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does: activity_id is identified as the target activity, and rpe is explained with its 0-10 valid range and the special meaning of 0. The schema provides only type information, making the description's parameter explanations essential and largely sufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly names the verb ('Set') and the resource ('perceived effort (RPE) for an activity'), which is unambiguous among the many set_activity_* sibling tools. It does not explicitly differentiate from siblings like set_activity_feel, but the RPE target and 0-10 scale make the purpose clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit guidance on when to use this tool versus alternative setters such as set_activity_feel or set_activity_name. It implies usage by naming what it does, but does not state conditions, exclusions, or when another sibling tool would be preferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unschedule_workoutA

Remove a scheduled workout from the Garmin Connect calendar

Deletes a calendar entry without deleting the underlying workout template — the workout stays in your library and can be re-scheduled.

IMPORTANT: scheduled_workout_id is the calendar-entry id, which is different from the workout's id. Get it from get_scheduled_workouts (the "scheduled_workout_id" field), not from get_workouts.

Note: the scheduled-workouts listing is an eventually-consistent index. If you just scheduled this workout, allow a moment before unscheduling so the id is available.

Args: scheduled_workout_id: Calendar-entry id from get_scheduled_workouts

ParametersJSON Schema
NameRequiredDescriptionDefault
scheduled_workout_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the side effect of not deleting the template and warns about the eventual-consistency delay. It does not mention error behavior, idempotency, or permissions, which would be useful but are not essential for basic operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is somewhat lengthy due to the important notes, but each sentence adds value. The use of 'IMPORTANT' and 'Note' labels makes it well-structured and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists, the description need not explain return values. The tool is simple with one parameter, and the description covers purpose, parameter semantics, side effects, and timing, providing all necessary context for an agent to decide when and how to invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only provides type integer with zero description coverage. The description fully compensates by explaining that the parameter is the calendar-entry ID, distinct from the workout ID, and precisely specifies where to obtain it (from get_scheduled_workouts' scheduled_workout_id field).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Remove a scheduled workout from the Garmin Connect calendar') and distinguishes it from deleting the underlying template, making the tool's purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly describes the use case and clarifies that this operation preserves the workout template, implying when to use this over a full deletion. The note about eventual consistency provides timing guidance. However, it does not name alternative sibling tools explicitly, but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unschedule_workoutsA

Remove multiple scheduled workouts from the Garmin Connect calendar

Deletes multiple calendar entries in a single call. The underlying workout templates are left intact in your library.

IMPORTANT: each id is a calendar-entry id (the "scheduled_workout_id" field from get_scheduled_workouts), not a workout id.

Args: scheduled_workout_ids: List of calendar-entry ids from get_scheduled_workouts

ParametersJSON Schema
NameRequiredDescriptionDefault
scheduled_workout_idsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present. The description discloses the primary side effect (deletes calendar entries) and a non-side effect (templates remain), which is helpful. However, it does not mention irreversibility, permissions, or other potential side effects beyond the delete operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief and well-organized, with a clear action, a side-effect clarification, and an important ID warning. Every sentence adds value and there is no redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists and the sibling tools provide surrounding context, the description gives enough information to call the tool correctly. It could mention return behavior, but that is not essential because the output schema is provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only provides an array of integers with no description, but the tool description supplies critical parameter semantics: the IDs are scheduled_workout_id values from get_scheduled_workouts, not workout IDs. This is highly useful and compensates for the schema's lack of detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Remove' and the target 'scheduled workouts' from the Garmin Connect calendar, and notes the underlying templates remain intact. It is distinct from the singular 'unschedule_workout' sibling and other workout-related tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says this is for multiple scheduled workouts in a single call and gives the crucial distinction that IDs are calendar-entry IDs, not workout IDs. It does not explicitly name the singular alternative, but the 'multiple' qualifier plus sibling names make the usage clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_custom_foodA

Update an existing custom food in the user's Garmin nutrition library

Fetches the food's current record before writing so that omitted optional fields (brand, carbs, protein, fat, micros, etc.) preserve their existing values rather than being cleared. Only the fields you explicitly pass are changed; everything else is carried forward from the current record.

All nutrient amounts are ABSOLUTE values per serving, not %DV. Nutrition labels often print %DV for calcium/iron/vitamin D — convert to absolute units before passing.

Use get_custom_foods first to find the foodId and servingId.

Args: food_id: ID of the custom food to update (from get_custom_foods) serving_id: Serving ID of the food (from get_custom_foods) food_name: Name of the custom food calories: Calories per serving serving_unit: Unit for serving size (e.g. "G", "ML", "OZ"). Default "G" number_of_units: Serving size in the specified unit. Default 100 brand_name: Brand or vendor name; omit to preserve the existing value carbs: Carbohydrates in grams per serving protein: Protein in grams per serving fat: Total fat in grams per serving fiber: Fiber in grams per serving sugar: Sugar in grams per serving saturated_fat: Saturated fat in grams per serving sodium: Sodium in mg per serving cholesterol: Cholesterol in mg per serving potassium: Potassium in mg per serving trans_fat: Trans fat in grams per serving calcium: Calcium in mg per serving (NOT %DV) iron: Iron in mg per serving (NOT %DV) vitamin_d: Vitamin D in mcg per serving (NOT %DV)

ParametersJSON Schema
NameRequiredDescriptionDefault
fatNo
ironNo
carbsNo
fiberNo
sugarNo
sodiumNo
calciumNo
food_idYes
proteinNo
caloriesYes
food_nameYes
potassiumNo
trans_fatNo
vitamin_dNo
brand_nameNo
serving_idYes
cholesterolNo
serving_unitNoG
saturated_fatNo
number_of_unitsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of disclosing side effects. It clearly states that omitted fields preserve existing values (non-destructive merge) and warns about unit conversions, giving good transparency. It does not mention potential permission requirements or failure modes, but the core behavioral intent is well explained.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is somewhat long but each paragraph serves a distinct purpose: one explains merge behavior, another clarifies unit conversions, and the last gives a prerequisite. The bullet-point parameter list is clear. It could be trimmed slightly, but no superfluous information is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (20 parameters, required fields, optional nutrient values), the description covers the key contextual points: how to identify the food, how to handle partial updates, and how to interpret nutritional units. It lacks a few edge-case details (e.g., what happens if the food_id doesn't exist), but overall it provides sufficient context for an agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already lists all parameters and defaults, but the description adds essential semantic meaning: it explicitly differentiates between absolute nutrient amounts and %DV, specifies units (grams, mg, mcg) for each nutrient, and highlights which fields are optional and preserved when omitted. This goes beyond the schema's bare property names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool updates an existing custom food in the user's nutrition library, distinguishing it from creation or deletion. The verb 'update' and the target resource are explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance: it instructs the agent to call get_custom_foods first to find food_id and serving_id, and explains the merge semantics for omitted fields. This directly tells the agent when and how to use this tool compared to related food tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_courseA

Upload a GPX file as a Garmin Connect Course.

The course can then be loaded onto the watch (sync or "Send to Device") and used as a navigation course or to build a PacePro strategy.

Args: gpx_path: Absolute path to the .gpx file on disk. course_name: Override the course name. Defaults to the name parsed from the GPX file. activity_type: One of running, cycling, hiking, walking, trail_running, mountain_biking, road_biking, gravel_cycling. Defaults to running. description: Optional description shown on the course detail page.

ParametersJSON Schema
NameRequiredDescriptionDefault
gpx_pathYes
course_nameNo
descriptionNo
activity_typeNorunning

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the behavioral disclosure burden. It clearly states that this uploads a GPX file into a Garmin Connect Course and describes post-upload usage, but it does not disclose side effects such as duplicate handling, overwrite behavior, required authentication, or validation rules.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in the first sentence, followed by a compact and useful operational context paragraph, then a clearly structured Args block. Every line adds information; there is no filler or repetition of the schema titles.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists and all input parameters are thoroughly documented, the description is complete enough for normal invocation. The only gaps are explicit failure-mode behavior and routing guidance relative to sibling tools, which are minor in the context of the other rich details provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, but the Args section fully compensates: gpx_path is defined as an absolute path, course_name's override behavior and default are explained, the full allowed set of activity_type values is listed, and description's purpose is clarified. This goes well beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Upload a GPX file as a Garmin Connect Course.' It also explains the purpose of the resulting course (navigation, PacePro), which clearly differentiates it from sibling tools like download_course_gpx and delete_course.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides practical context about loading the course onto a watch, which implies when this tool is useful, but it does not explicitly mention alternatives or when not to use it. An agent can infer the use case but is not directly routed away from related tools like upload_workout.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_workoutA

Upload a workout from JSON data

Creates a new workout in Garmin Connect from structured workout data.

IMPORTANT: Step types must use Garmin's DTO format:

  • Use "ExecutableStepDTO" for regular steps (warmup, interval, cooldown, recovery)

  • Use "RepeatGroupDTO" for repeat/interval groups with numberOfIterations. Always include endCondition with conditionTypeId 7 and conditionTypeKey "iterations"; omitting conditionTypeId causes the API to silently corrupt the repeat count.

IMPORTANT: Heart rate targets come in two forms:

  • Named zone (e.g. Zone 2): set targetType to "heart.rate.zone" and use "zoneNumber" (1-5). Do NOT put the zone number in targetValueOne.

  • Custom HR range (e.g. 105-143 bpm): set targetType to "heart.rate.zone" and use "targetValueOne" (low bpm) / "targetValueTwo" (high bpm). Do NOT set "zoneNumber". This matches Garmin Connect's "Custom" heart rate target. For non-HR targets (pace, power, cadence), use targetValueOne/targetValueTwo directly. Target values are fields on the workout step, alongside targetType; do not put targetValueOne, targetValueTwo, or zoneNumber inside the targetType object. Use either zoneNumber or targetValueOne/targetValueTwo, not both. Garmin silently discards a custom range when a named zone is also present.

Note: a safety check converts targetValueOne 1-5 to zoneNumber when zoneNumber is missing, to catch the common mistake of putting a zone index in targetValueOne. Typical bpm values (e.g. 105, 143) are not affected.

IMPORTANT: Target type IDs and keys must match Garmin's canonical mapping. Garmin treats workoutTargetTypeId as authoritative, so mismatches are rejected before upload. Known mappings:

  • workoutTargetTypeId 1 -> "no.target"

  • workoutTargetTypeId 2 -> "power.zone" (cycling power zone 1-7, use zoneNumber)

  • workoutTargetTypeId 4 -> "heart.rate.zone"

  • workoutTargetTypeId 6 -> "pace.zone" (running/swim) OR "power.between" (cycling)

IMPORTANT: For cycling power targets use the correct target type:

  • Power zone (zone 1-7 based on FTP %): use workoutTargetTypeId 2, key "power.zone", and "zoneNumber" (1-7).

  • Absolute watt range (e.g. 200-250 W): use workoutTargetTypeId 6, key "power.between", and "targetValueOne" (low watts) / "targetValueTwo" (high watts). Using workoutTargetTypeId 2 with key "power.between" is a silent Garmin bug: the workout uploads but Garmin stores it as "power.zone" and the intent is lost.

Use {"workoutTargetTypeId": 4, "workoutTargetTypeKey": "heart.rate.zone"} with targetValueOne/targetValueTwo for custom heart-rate ranges.

IMPORTANT: Sport type IDs for workouts (different from activity API!):

  • 1 = running, 2 = cycling, 5 = strength_training, 6 = cardio, 11 = walking

IMPORTANT: End condition IDs and keys must match Garmin's canonical mapping. Garmin treats conditionTypeId as authoritative, so mismatches such as {"conditionTypeId": 4, "conditionTypeKey": "heart.rate"} are rejected before upload because Garmin would interpret them as "calories". Use {"conditionTypeId": 6, "conditionTypeKey": "heart.rate"} for heart-rate end conditions.

Available Templates: Instead of building workout JSON from scratch, you can use these MCP resources as starting points:

  • workout://templates/simple-run - Basic warmup/run/cooldown structure

  • workout://templates/interval-running - Interval training with repeat groups

  • workout://templates/tempo-run - Tempo run with heart rate zone targets

  • workout://templates/strength-circuit - Strength training with exercises, reps, rest

  • workout://reference/structure - Complete JSON structure reference with all fields

Access these resources using your MCP client's resource reading capability, modify the template as needed, and pass the resulting JSON as the workout_data parameter.

Strength training workouts require these additional fields on each exercise step:

  • "category": exercise category (e.g. "BENCH_PRESS", "PULL_UP", "CURL", "SHOULDER_PRESS", "ROW", "SQUAT", "DEADLIFT", "TRICEPS_EXTENSION", "PLANK", "LUNGE", "CARDIO")

  • "exerciseName": specific exercise (e.g. "BARBELL_BENCH_PRESS", "PULL_UP", "DUMBBELL_BICEPS_CURL", "DUMBBELL_SHOULDER_PRESS", "BENT_OVER_ROW_WITH_DUMBELL", "BODY_WEIGHT_DIP", "BARBELL_SQUAT", "BARBELL_DEADLIFT")

  • "weightValue" (optional): weight as number (e.g. 24.0)

  • "weightUnit" (optional): {"unitId": 8, "unitKey": "kilogram", "factor": 1000.0} Use endCondition reps (conditionTypeId: 10) for exercises, rest (stepTypeId: 5) between sets.

Example strength exercise step: { "type": "ExecutableStepDTO", "stepOrder": 1, "stepType": {"stepTypeId": 3, "stepTypeKey": "interval"}, "endCondition": {"conditionTypeId": 10, "conditionTypeKey": "reps"}, "endConditionValue": 10.0, "targetType": {"workoutTargetTypeId": 1, "workoutTargetTypeKey": "no.target"}, "category": "BENCH_PRESS", "exerciseName": "BARBELL_BENCH_PRESS", "weightValue": 60.0, "weightUnit": {"unitId": 8, "unitKey": "kilogram", "factor": 1000.0} }

Example running workout with HR zone target: { "workoutName": "My Workout", "sportType": {"sportTypeId": 1, "sportTypeKey": "running"}, "workoutSegments": [{ "segmentOrder": 1, "sportType": {"sportTypeId": 1, "sportTypeKey": "running"}, "workoutSteps": [{ "type": "ExecutableStepDTO", "stepOrder": 1, "stepType": {"stepTypeId": 3, "stepTypeKey": "interval"}, "endCondition": {"conditionTypeId": 2, "conditionTypeKey": "time"}, "endConditionValue": 1200.0, "targetType": {"workoutTargetTypeId": 4, "workoutTargetTypeKey": "heart.rate.zone"}, "zoneNumber": 3 }] }] }

Args: workout_data: Dictionary containing workout structure (name, sport type, segments, etc.)

ParametersJSON Schema
NameRequiredDescriptionDefault
workout_dataYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden — and it excels. It discloses silent data-corruption risks (repeat count corruption without conditionTypeId, custom HR range discarded when zoneNumber present, power.between stored as power.zone), a safety check that remaps targetValueOne 1-5 to zoneNumber, and server-side rejection behavior for mismatched target/condition type IDs. This is exemplary transparency about failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long, but the length is earned given a free-form object parameter and Garmin's finicky validation. It is well-structured with bolded IMPORTANT sections, template listings, and examples placed at the end. Minor redundancy (heart-rate target guidance appears twice, and the standalone 'Use {workoutTargetTypeId: 4...}' sentence repeats earlier bullets) prevents a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For the hard part — constructing a valid workout payload — the description is nearly exhaustive: DTO types, target types, end conditions, sport IDs, strength requirements, templates, and examples. Return values are covered by the presence of an output schema, so not explaining them is acceptable. The only real gap is the lack of sibling differentiation, already noted in usage_guidelines.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% — workout_data is an unconstrained object with additionalProperties true. The description fully compensates by documenting the nested structure (workoutName, sportType, workoutSegments, workoutSteps), enumerating sport type IDs, target type ID/key mappings, end condition mappings, strength-specific fields with units, and providing two complete JSON examples. An agent can construct a valid payload entirely from the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening line "Upload a workout from JSON data — Creates a new workout in Garmin Connect from structured workout data" states a specific verb, resource, and input format. It is clearly distinguishable from sibling helpers like create_run_workout and create_strength_workout, which operate at a higher abstraction level, while this tool accepts raw structured JSON.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives useful how-to guidance (templates as starting points, strength-workout field requirements) but never explicitly says when to use this tool versus sibling alternatives like create_run_workout, create_strength_workout, or the plural upload_workouts. Usage context is implied by 'from JSON data' but no when-not-to-use or alternative-routing guidance is provided, which matters given the large sibling set.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_workoutsA

Upload multiple workouts from JSON data in a single call

Creates multiple new workouts in Garmin Connect. Each item in the list uses the same structure as upload_workout.

IMPORTANT: Step types must use Garmin's DTO format:

  • Use "ExecutableStepDTO" for regular steps (warmup, interval, cooldown, recovery)

  • Use "RepeatGroupDTO" for repeat/interval groups with numberOfIterations. Always include endCondition with conditionTypeId 7 and conditionTypeKey "iterations"; omitting conditionTypeId causes the API to silently corrupt the repeat count.

IMPORTANT: For named heart rate zone targets, use "zoneNumber" (1-5), NOT targetValueOne/targetValueTwo. For custom heart-rate ranges, use targetType {"workoutTargetTypeId": 4, "workoutTargetTypeKey": "heart.rate.zone"} with targetValueOne/targetValueTwo. Target values belong on the workout step, alongside targetType, not inside it. For cycling power zone targets (zone-based), use workoutTargetTypeId 2, key "power.zone". For cycling absolute watt range targets, use workoutTargetTypeId 6, key "power.between", with targetValueOne (low watts) and targetValueTwo (high watts). Target type IDs and keys must match Garmin's canonical mapping.

IMPORTANT: End condition IDs and keys must match Garmin's canonical mapping. Garmin treats conditionTypeId as authoritative, so mismatches are rejected before upload.

Args: workouts: List of workout dictionaries, each containing workout structure (name, sport type, segments, etc.) — same format as upload_workout.

ParametersJSON Schema
NameRequiredDescriptionDefault
workoutsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the behavioral burden itself. It clearly indicates mutation by creating workouts, and it adds meaningful warnings about silent repeat-count corruption and pre-upload rejection when end condition IDs are mismatched. It does not cover partial-failure behavior, batch atomicity, or rate limits, but it goes beyond a basic mutation statement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is lengthy, but the density of Garmin-specific DTO constraints justifies the length. It is well-structured with an opening purpose statement and visually separated IMPORTANT sections, though there is some repetition around canonical mappings and target type IDs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given one opaque parameter, no annotations, and an existing output schema, the description focuses appropriately on input encoding and covers critical formatting pitfalls. It delegates the full top-level workout structure to upload_workout and does not mention batch size limits or atomicity, but it is largely complete for the stated use case.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema only provides a generic array of objects with 0% description coverage, so the description must compensate. It explains that each item is a workout dictionary with the same structure as upload_workout, and it provides detailed, non-obvious semantics for step DTOs, repeat groups, end conditions, heart-rate targets, and power-zone targets. This adds substantial meaning that the schema entirely lacks.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that this tool uploads multiple workouts from JSON in a single call and creates multiple new workouts in Garmin Connect. It also distinguishes itself from the singular upload_workout sibling by describing the batch behavior and referencing the same item structure.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the batch use case explicit ('multiple workouts from JSON data in a single call') and points to upload_workout as the format reference. It does not explicitly state when not to use it or when to prefer schedule_workouts or delete_workouts, but the intended context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upsert_and_logA

Find-or-create a custom food then log it in one step

Searches the user's custom food library for food_name. If found, logs it immediately. If not found, creates it with the provided nutrition data and then logs it. This avoids duplicate food entries and removes the need for separate search → create → log round-trips.

Args: meal_date: Date in YYYY-MM-DD format meal_time: Time in HH:MM:SS format (account timezone); used to determine the meal automatically food_name: Name of the food to find or create calories: Calories per serving carbs: Carbohydrates in grams per serving protein: Protein in grams per serving fat: Total fat in grams per serving serving_unit: Unit for serving size (e.g. "G", "ML", "OZ"). Default "G" number_of_units: Serving size in the specified unit. Default 100 serving_qty: Number of servings to log (default 1)

ParametersJSON Schema
NameRequiredDescriptionDefault
fatNo
carbsNo
proteinNo
caloriesYes
food_nameYes
meal_dateYes
meal_timeYes
serving_qtyNo
serving_unitNoG
number_of_unitsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full responsibility for conveying behavior. It explicitly describes the find-or-create-log workflow, including the conditional logic (search, then either log or create and log). It also clarifies that it uses the provided nutrition data only when creating a new food, implying that existing foods are logged as-is. No side effects are hidden or contradicted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and appropriately concise. It opens with a one-sentence summary, adds a brief elaboration of the workflow, and then presents a clear, labeled parameter list. There is minimal redundancy; the opening sentence and the following paragraph complement each other rather than repeating information unnecessarily.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers all necessary contextual information: it specifies the food source (custom food library), the condition for creating vs. logging, how meal_time is used, and the defaults for optional parameters. Since an output schema exists, the absence of return value details is acceptable. No critical usage details are missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description includes an 'Args:' section that provides semantic meaning for all 10 parameters, including the purpose of meal_time ('used to determine the meal automatically'), the units for nutrient values, and defaults for serving_unit and number_of_units. This fully compensates for the lack of schema property descriptions (0% schema coverage).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: it finds or creates a custom food and logs it in one step. It explicitly names the resource (custom food library and nutrition log) and the actions (search, create, log). It also distinguishes itself from sibling tools by mentioning it avoids duplicate food entries and removes the need for separate search, create, and log round-trips.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage guidance by stating the conditional behavior: 'If found, logs it immediately. If not found, creates it...' It also explains when this tool is appropriate by highlighting the benefit of avoiding duplicate entries and multiple round-trips, which indirectly contrasts with using separate search, create, and log tools. This gives an agent sufficient context to decide when to invoke this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 138 tool updatesv0.1.0
    • First observedadd_body_composition
    • First observedadd_gear_to_activity
    • First observedadd_hydration_data
    • First observedadd_weigh_in
    • First observedadd_weigh_in_with_timestamps
    • First observedcount_activities
    • First observedcreate_custom_food
    • First observedcreate_manual_activity
    • First observedcreate_run_workout
    • First observedcreate_strength_workout
    • First observedcreate_walk_run_workout
    • First observedcreate_z2_walk_workout
    • First observeddelete_course
    • First observeddelete_custom_food
    • First observeddelete_food_log
    • First observeddelete_weigh_ins
    • First observeddelete_workout
    • First observeddelete_workouts
    • First observeddownload_activity_file
    • First observeddownload_workout
    • First observedget_activities
    • First observedget_activities_by_date
    • First observedget_activities_fordate
    • First observedget_activity
    • First observedget_activity_exercise_sets
    • First observedget_activity_fit_data
    • First observedget_activity_gear
    • First observedget_activity_hr_in_timezones
    • First observedget_activity_power_in_timezones
    • First observedget_activity_split_summaries
    • First observedget_activity_splits
    • First observedget_activity_typed_splits
    • First observedget_activity_types
    • First observedget_activity_weather
    • First observedget_adhoc_challenges
    • First observedget_all_day_events
    • First observedget_all_day_stress
    • First observedget_available_badge_challenges
    • First observedget_badge_challenges
    • First observedget_blood_pressure
    • First observedget_body_battery
    • First observedget_body_battery_events
    • First observedget_body_composition
    • First observedget_courses
    • First observedget_custom_food_serving_units
    • First observedget_custom_foods
    • First observedget_cycling_ftp
    • First observedget_daily_steps
    • First observedget_daily_weigh_ins
    • First observedget_device_alarms
    • First observedget_device_last_used
    • First observedget_device_settings
    • First observedget_device_solar_data
    • First observedget_devices
    • First observedget_earned_badges
    • First observedget_endurance_score
    • First observedget_fitnessage_data
    • First observedget_floors
    • First observedget_full_name
    • First observedget_garmin_coach_workouts
    • First observedget_gear
    • First observedget_goals
    • First observedget_heart_rates
    • First observedget_heart_rates_summary
    • First observedget_hill_score
    • First observedget_hrv_data
    • First observedget_hrv_trend
    • First observedget_hydration_data
    • First observedget_inprogress_virtual_challenges
    • First observedget_lactate_threshold
    • First observedget_lifestyle_logging_data
    • First observedget_menstrual_calendar_data
    • First observedget_menstrual_data_for_date
    • First observedget_morning_training_readiness
    • First observedget_non_completed_badge_challenges
    • First observedget_nutrition_daily_food_log
    • First observedget_nutrition_daily_meals
    • First observedget_nutrition_daily_settings
    • First observedget_personal_record
    • First observedget_power_duration_curve
    • First observedget_pregnancy_summary
    • First observedget_primary_training_device
    • First observedget_progress_summary_between_dates
    • First observedget_race_predictions
    • First observedget_respiration_data
    • First observedget_respiration_summary
    • First observedget_respiration_trend
    • First observedget_rhr_day
    • First observedget_scheduled_workouts
    • First observedget_sleep_data
    • First observedget_sleep_summary
    • First observedget_spo2_data
    • First observedget_stats
    • First observedget_stats_and_body
    • First observedget_steps_data
    • First observedget_stress_data
    • First observedget_stress_summary
    • First observedget_training_effect
    • First observedget_training_load_balance
    • First observedget_training_load_trend
    • First observedget_training_plan_workouts
    • First observedget_training_readiness
    • First observedget_training_status
    • First observedget_unit_system
    • First observedget_user_profile
    • First observedget_user_summary
    • First observedget_userprofile_settings
    • First observedget_vo2max_trend
    • First observedget_weekly_intensity_minutes
    • First observedget_weekly_steps
    • First observedget_weekly_stress
    • First observedget_weigh_ins
    • First observedget_workout_by_id
    • First observedget_workouts
    • First observedlog_custom_food
    • First observedlog_food
    • First observedremove_gear_from_activity
    • First observedrequest_reload
    • First observedschedule_week
    • First observedschedule_workout
    • First observedschedule_workouts
    • First observedsearch_foods
    • First observedset_activity_description
    • First observedset_activity_event_type
    • First observedset_activity_feel
    • First observedset_activity_name
    • First observedset_activity_type
    • First observedset_blood_pressure
    • First observedset_fit_download_dir
    • First observedset_nutrition_daily_settings
    • First observedset_perceived_effort
    • First observedunschedule_workout
    • First observedunschedule_workouts
    • First observedupdate_custom_food
    • First observedupload_course
    • First observedupload_workout
    • First observedupload_workouts
    • First observedupsert_and_log

TDQS

B3.1/5.0

Scored across 138 tools

Disambiguation2/5

The set contains multiple overlapping clusters: get_activities/get_activities_by_date/get_activities_fordate, get_stats/get_user_summary/get_stats_and_body, several full-vs-summary metric pairs, and an explicit duplicate alias in get_training_plan_workouts vs get_garmin_coach_workouts. Detailed descriptions help, but agents will often have to guess which of several near-synonymous getters returns the data they need.

Naming Consistency2/5

Most tools follow a get_* pattern, but consistency breaks down with names like get_activities_fordate, get_userprofile_settings, set_perceived_effort vs set_activity_feel, and get_weigh_ins vs add_weigh_in. The mix of get/add/set/create/upload/log/upsert verbs across related operations makes the naming convention unpredictable.

Tool Count1/5

138 tools is an extreme count, well beyond the 50+ threshold for a low score. While Garmin's API surface is broad, this many tools could be consolidated into domain-focused tools with parameters instead of exposing one tool per endpoint variant.

Completeness4/5

The tool surface covers virtually all Garmin Connect domains: activities, health metrics, devices, workouts, nutrition, courses, challenges, body composition, and more, with CRUD coverage for most areas. Minor gaps exist such as no delete-activity tool and no course update, but core workflows do not hit dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Connects Garmin Connect data to MCP-compatible clients, providing access to fitness activities, health metrics, and training plans. It supports advanced features like headless 2FA and automated MFA retrieval to enable seamless health data interaction through natural language.
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Exposes personal Garmin wellness data through MCP tools for accessing summary, sleep, HRV, heart rate, stress, body battery, and historical data.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Personal MCP server for interacting with your Garmin Connect data. Exposes 62 tools across 11 domains including activities, health, training, and workouts.
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Connects MCP clients to Garmin Connect data, enabling queries about activities, sleep, heart rate, body battery, and training status.
    MIT