Skip to main content
Glama
trenerok

oura-mcp-server

by trenerok

Oura Ring MCP Server

License: MIT Node.js MCP

A comprehensive Model Context Protocol (MCP) server for the Oura Ring API V2. Access sleep, activity, readiness, heart rate, stress, and other health data from your Oura Ring through AI assistants like Claude, ChatGPT, or Cursor IDE.

Security First: This server implements read-only operations only for user data. Your health information cannot be modified.


What is This?

This MCP server allows AI assistants to access your Oura Ring health data. When connected, you can ask questions like:

  • "How did I sleep last night?"

  • "What's my readiness score this week?"

  • "Show me my heart rate trends"

  • "Analyze my stress patterns"

Keywords: Oura Ring, MCP Server, Model Context Protocol, Sleep Tracking, Health Data, Wearable API, AI Integration, Claude, ChatGPT, Cursor


Related MCP server: Oura Ring MCP Server

Table of Contents


What is Oura Ring?

Oura Ring is a smart ring that tracks:

  • Sleep - Sleep stages (deep, light, REM), sleep quality, timing

  • Activity - Steps, calories, movement throughout the day

  • Readiness - Recovery score based on sleep, activity, and body signals

  • Heart Rate - Continuous heart rate and HRV (heart rate variability)

  • Body Temperature - Skin temperature deviations

  • Stress - Daytime stress and recovery patterns

  • SpO2 - Blood oxygen saturation levels

This MCP server provides access to all this data through the Oura API V2.


Features

Feature

Description

37 MCP Tools

Complete coverage of all Oura API V2 endpoints

Read-only by design

Cannot modify user data

OAuth2 Authentication

Secure token-based authentication with refresh token support

Automatic Token Refresh

Automatically refreshes expired access tokens

Sandbox Support

Test with mock data before using real data

Rate Limiting

Built-in rate limiting with exponential backoff

Token Sanitization

Access tokens are never exposed in logs or errors


Quick Start

1. Clone and Install

git clone https://github.com/trenerok/oura-mcp-server.git
cd oura-mcp-server
npm install

2. Get OAuth2 Credentials

See Getting an Access Token below.

3. Build

npm run build

4. Configure MCP Client

See MCP Client Setup for Claude Desktop, Cursor IDE, or other clients.


Getting an Access Token

Oura uses OAuth2 for authentication. Personal access tokens were deprecated in December 2025.

Step 1: Create an OAuth2 Application

  1. Go to Oura Cloud Applications

  2. Click "New Application"

  3. Fill in the required fields:

    • Display Name: Your app name (e.g., "My MCP Server")

    • Description: Brief description

    • Website: Your website or GitHub repo URL

    • Privacy Policy: URL (can be your GitHub repo for personal use)

    • Terms of Service: URL (can be your GitHub repo for personal use)

    • Redirect URI: http://localhost:8080/callback

  4. Select all the Scopes you want to access

  5. Click "Create Application"

  6. Copy your Client ID and Client Secret

Step 2: Get Access Token

Use the included helper script:

node scripts/get-token.js YOUR_CLIENT_ID YOUR_CLIENT_SECRET

This will:

  1. Open your browser to authorize the application

  2. Exchange the authorization code for tokens

  3. Display your access token and refresh token

Step 3: Save Your Tokens

Add the tokens to your MCP configuration (see MCP Client Setup).


Configuration

Environment Variables

Variable

Required

Description

OURA_ACCESS_TOKEN

Yes*

OAuth2 access token for user data

OURA_REFRESH_TOKEN

No

Refresh token for automatic token renewal

OURA_CLIENT_ID

No**

OAuth2 application client ID

OURA_CLIENT_SECRET

No**

OAuth2 application client secret

OURA_USE_SANDBOX

No

Set to true for sandbox/mock data

* Required for user data endpoints ** Required for token refresh and webhook management

Automatic Token Refresh

If you provide OURA_REFRESH_TOKEN, OURA_CLIENT_ID, and OURA_CLIENT_SECRET, the server will automatically refresh your access token when it expires (typically after 24 hours).


MCP Client Setup

Claude Desktop

Add to your claude_desktop_config.json:

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

{
  "mcpServers": {
    "oura": {
      "command": "node",
      "args": ["/absolute/path/to/oura-mcp-server/dist/index.js"],
      "env": {
        "OURA_ACCESS_TOKEN": "your_access_token",
        "OURA_REFRESH_TOKEN": "your_refresh_token",
        "OURA_CLIENT_ID": "your_client_id",
        "OURA_CLIENT_SECRET": "your_client_secret"
      }
    }
  }
}

Cursor IDE

Add to .cursor/mcp.json in your project directory:

{
  "mcpServers": {
    "oura": {
      "command": "node",
      "args": ["./dist/index.js"],
      "env": {
        "OURA_ACCESS_TOKEN": "your_access_token",
        "OURA_REFRESH_TOKEN": "your_refresh_token",
        "OURA_CLIENT_ID": "your_client_id",
        "OURA_CLIENT_SECRET": "your_client_secret"
      }
    }
  }
}

Other MCP Clients

Use similar configuration with the appropriate config file format for your client.


Available Tools (37 Total)

Overview by Category

Category

Count

Tools

Personal Info

1

User profile (age, weight, height)

Sleep

6

Sleep sessions, daily scores, bedtime recommendations

Activity

2

Daily activity, steps, calories burned

Health Metrics

14

Heart rate, readiness, SpO2, stress, resilience, cardiovascular age, VO2 max

Workouts

4

Workout sessions, meditation/breathing sessions

Tags

4

User-created tags and enhanced tags

Device

4

Ring configuration, rest mode periods

Webhooks

6

Webhook subscription management

Complete Tool List

Personal Info (1 tool)

Tool

Description

get_personal_info

Get user profile: age, weight, height, biological sex, email

Sleep (6 tools)

Tool

Description

get_sleep

Detailed sleep sessions with stages (deep, light, REM), HRV, heart rate

get_sleep_by_id

Single sleep session by document ID

get_daily_sleep

Daily sleep scores with contributor breakdown

get_daily_sleep_by_id

Single daily sleep document by ID

get_sleep_time

Optimal bedtime recommendations

get_sleep_time_by_id

Single sleep time document by ID

Activity (2 tools)

Tool

Description

get_daily_activity

Daily steps, calories, active time, MET minutes

get_daily_activity_by_id

Single daily activity document by ID

Health Metrics (14 tools)

Tool

Description

get_heart_rate

Heart rate time series (BPM with timestamps)

get_daily_readiness

Daily readiness scores with contributors

get_daily_readiness_by_id

Single readiness document by ID

get_daily_spo2

Blood oxygen saturation (SpO2) data

get_daily_spo2_by_id

Single SpO2 document by ID

get_daily_stress

Daily stress levels and recovery time

get_daily_stress_by_id

Single stress document by ID

get_daily_resilience

Daily resilience scores

get_daily_resilience_by_id

Single resilience document by ID

get_daily_cardiovascular_age

Vascular age estimates

get_daily_cardiovascular_age_by_id

Single cardiovascular age document by ID

get_vo2_max

VO2 max estimates (cardiovascular fitness)

get_vo2_max_by_id

Single VO2 max document by ID

Workouts (4 tools)

Tool

Description

get_workouts

Workout sessions (activity type, calories, distance, duration)

get_workout_by_id

Single workout document by ID

get_sessions

Meditation and breathing sessions with HRV data

get_session_by_id

Single session document by ID

Tags (4 tools)

Tool

Description

get_tags

User-created tags for tracking behaviors

get_tag_by_id

Single tag document by ID

get_enhanced_tags

Enhanced tags with metadata and time ranges

get_enhanced_tag_by_id

Single enhanced tag document by ID

Device (4 tools)

Tool

Description

get_ring_configuration

Ring details: color, size, firmware, hardware type

get_ring_configuration_by_id

Single ring configuration by ID

get_rest_mode_periods

Rest mode activation history

get_rest_mode_period_by_id

Single rest mode period by ID

Webhooks (6 tools) - Requires Client Credentials

Tool

Description

list_webhook_subscriptions

List all webhook subscriptions

get_webhook_subscription

Get a specific webhook by ID

create_webhook_subscription

Create new webhook subscription

update_webhook_subscription

Update existing webhook

delete_webhook_subscription

Delete a webhook subscription

renew_webhook_subscription

Renew webhook before expiration


Tool Reference

Common Parameters

Date Range Parameters (most tools)

Parameter

Format

Required

Description

start_date

YYYY-MM-DD

No

Start of date range

end_date

YYYY-MM-DD

No

End of date range

next_token

string

No

Pagination token for next page

DateTime Parameters (heart rate only)

Parameter

Format

Required

Description

start_datetime

ISO 8601

No

Start datetime (e.g., 2024-01-01T00:00:00Z)

end_datetime

ISO 8601

No

End datetime

next_token

string

No

Pagination token

Example Responses

Personal Info

{
  "id": "abc123",
  "age": 35,
  "weight": 75.5,
  "height": 1.80,
  "biological_sex": "male",
  "email": "user@example.com"
}

Daily Sleep

{
  "data": [
    {
      "id": "sleep123",
      "day": "2024-01-15",
      "score": 85,
      "contributors": {
        "deep_sleep": 80,
        "efficiency": 90,
        "latency": 85,
        "rem_sleep": 75,
        "restfulness": 82,
        "timing": 95,
        "total_sleep": 88
      },
      "timestamp": "2024-01-15T00:00:00.000+00:00"
    }
  ],
  "next_token": null
}

Daily Readiness

{
  "data": [
    {
      "id": "ready123",
      "day": "2024-01-15",
      "score": 78,
      "contributors": {
        "activity_balance": 85,
        "body_temperature": 100,
        "hrv_balance": 72,
        "previous_day_activity": 80,
        "previous_night": 75,
        "recovery_index": 90,
        "resting_heart_rate": 82,
        "sleep_balance": 70
      },
      "temperature_deviation": 0.1,
      "timestamp": "2024-01-15T00:00:00.000+00:00"
    }
  ],
  "next_token": null
}

Heart Rate

{
  "data": [
    {
      "bpm": 62,
      "source": "awake",
      "timestamp": "2024-01-15T08:30:00+00:00"
    },
    {
      "bpm": 58,
      "source": "rest",
      "timestamp": "2024-01-15T08:35:00+00:00"
    }
  ],
  "next_token": null
}

For AI Agents

This section provides structured guidance for AI agents using this MCP server.

Server Capabilities

  • Data Access: Read-only access to all Oura Ring health data

  • Authentication: OAuth2 Bearer token with automatic refresh

  • Real-time Data: Data is fetched live from Oura API

  • Pagination: Large datasets return next_token for pagination

Quick Start for AI Agents

  1. Verify connectivity: Call get_personal_info first

  2. Use date ranges: Always specify start_date to limit data

  3. Handle empty data: Empty arrays mean no data for that period

  4. Check null values: Many fields may be null if unavailable

Health Dashboard

1. get_personal_info() → Get user profile
2. get_daily_readiness(start_date: "<7 days ago>") → Weekly readiness trend
3. get_daily_sleep(start_date: "<7 days ago>") → Weekly sleep scores
4. get_daily_activity(start_date: "<7 days ago>") → Weekly activity
5. get_daily_stress(start_date: "<7 days ago>") → Weekly stress patterns

Sleep Analysis

1. get_daily_sleep(start_date: "<30 days ago>") → Monthly sleep scores
2. get_sleep(start_date: "<7 days ago>") → Detailed sleep sessions with stages
3. get_sleep_time(start_date: "<7 days ago>") → Bedtime recommendations

Fitness Assessment

1. get_daily_activity(start_date: "<30 days ago>") → Activity trends
2. get_workouts(start_date: "<30 days ago>") → Workout history
3. get_vo2_max(start_date: "<30 days ago>") → Cardiovascular fitness
4. get_heart_rate(start_datetime: "<today>T00:00:00Z") → Today's heart rate

Stress & Recovery

1. get_daily_stress(start_date: "<7 days ago>") → Stress levels
2. get_daily_resilience(start_date: "<7 days ago>") → Resilience scores
3. get_daily_readiness(start_date: "<7 days ago>") → Recovery status

Key Metrics Explained

Metric

Range

Meaning

Sleep Score

0-100

Overall sleep quality (>85 = optimal)

Readiness Score

0-100

Recovery level (>85 = ready for activity)

Activity Score

0-100

Daily movement goal progress

Stress (high)

seconds

Time in high stress state

Recovery (high)

seconds

Time in recovery/rest state

HRV

ms

Heart rate variability (higher = better recovery)

Resting HR

bpm

Resting heart rate (lower = better fitness)

Error Handling

Error

Cause

Solution

Access token not configured

Missing OURA_ACCESS_TOKEN

Add token to config

401 Unauthorized

Token expired

Server auto-refreshes if refresh token provided

403 Forbidden

Scope not authorized

Re-authorize with required scopes

429 Rate Limit

Too many requests

Server auto-retries with backoff

Empty data: []

No data for date range

Try different date range

Important Notes

  • Date Format: Use YYYY-MM-DD for dates

  • Datetime Format: Use ISO 8601 for get_heart_rate (e.g., 2024-01-15T00:00:00Z)

  • Timezone: Data is returned in user's timezone

  • Pagination: If next_token is not null, more data is available

  • Null Values: Fields may be null if ring wasn't worn or data unavailable


Rate Limiting

The server implements automatic rate limiting per Oura API documentation.

Limit

Value

Requests

5000 per 5 minutes

Algorithm

Token bucket with refill

Retry

Exponential backoff (1s → 2s → 4s, max 30s)

Max Retries

3 attempts


Project Structure

oura-mcp-server/
├── src/
│   ├── index.ts           # MCP server entry point
│   ├── client.ts          # Oura API client with auth & rate limiting
│   ├── rate-limiter.ts    # Token bucket rate limiter
│   ├── types.ts           # TypeScript type definitions
│   └── tools/
│       ├── index.ts       # Tool aggregator
│       ├── personal-info.ts
│       ├── sleep.ts
│       ├── activity.ts
│       ├── health.ts
│       ├── workout.ts
│       ├── tags.ts
│       ├── device.ts
│       └── webhook.ts
├── scripts/
│   └── get-token.js       # OAuth2 token helper
├── dist/                  # Compiled JavaScript
├── package.json
├── tsconfig.json
├── .env.example
├── .gitignore
├── LICENSE
├── CHANGELOG.md
└── README.md

Security

Best Practices

  1. Never commit tokens — Use environment variables

  2. Use refresh tokens — Enable automatic token renewal

  3. Test with sandbox — Set OURA_USE_SANDBOX=true for development

  4. Limit scopes — Only request OAuth2 scopes you need

Security Features

  • Access tokens sanitized from all error messages

  • Read-only API access (cannot modify data)

  • Automatic token refresh (no manual token management)

  • Rate limiting prevents API abuse


Troubleshooting

Common Issues

Issue

Solution

Cannot find module

Run npm run build

Access token not configured

Add OURA_ACCESS_TOKEN to env

401 Unauthorized

Token expired; add refresh token or get new token

403 Forbidden

Missing OAuth2 scope; re-authorize app

Empty data returned

Check date range; ensure ring synced data

Token not authorized for scope

Re-create OAuth2 app with required scopes

Getting Help

  1. Check Oura API Documentation

  2. Open an issue on GitHub

  3. Check MCP Protocol Documentation


Development

# Install dependencies
npm install

# Build TypeScript
npm run build

# Watch mode (auto-rebuild)
npm run dev

# Run server
npm start

# Clean build
npm run clean

Contributing

  1. Fork the repository

  2. Create a feature branch: git checkout -b feature/my-feature

  3. Make changes and test: npm run build

  4. Commit: git commit -m "Add my feature"

  5. Push: git push origin feature/my-feature

  6. Create a Pull Request


API Reference


License

MIT License — see LICENSE file.


Disclaimer

This software is provided "as is" without warranty. This project is not affiliated with or endorsed by Oura Health Oy.

Not medical advice. Oura Ring data is for informational purposes only and should not be used for medical diagnosis or treatment.

Available Tools

40 tools
create_webhook_subscriptionB

Create a new webhook subscription to receive notifications when data changes. Requires OURA_CLIENT_ID and OURA_CLIENT_SECRET environment variables. Valid data types: tag, enhanced_tag, workout, session, daily_activity, daily_sleep, daily_spo2, daily_readiness, sleep, sleep_time, rest_mode_period, ring_configuration, daily_stress, daily_resilience, daily_cardiovascular_age, vO2_max, heartrate.

ParametersJSON Schema
NameRequiredDescriptionDefault
data_typeYes
event_typeYes
callback_urlYesThe URL to receive webhook notifications
verification_tokenYesA token used to verify webhook deliveries

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 full behavioral burden; it usefully covers the auth prerequisite and the accepted data types. It omits other mutation traits an agent would want — whether duplicate subscriptions are allowed, whether a verification handshake must succeed before deliveries start, and whether the operation is idempotent.

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?

Two dense sentences with the purpose and the auth prerequisite front-loaded, then the value list. The enumeration is long but earns its place because it substitutes for missing enums in the schema; the only redundancy is slight overlap in the data-type naming scheme.

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 4-required-parameter mutation with nested objects, no annotations, and no output schema, several essentials are missing: the structure and allowed values of event_type, and any description of what the creation returns. The auth requirement and data_type domain partially cover the gap.

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

Parameters3/5

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

Schema coverage is 50%: callback_url and verification_token are already documented in the schema, while data_type and event_type are bare objects. The description compensates for data_type by enumerating valid values, which is real added meaning since the schema has no enums, but event_type remains completely unexplained in both places.

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 opens with a specific verb+resource ('Create a new webhook subscription') and states the benefit ('receive notifications when data changes'), so the agent immediately knows what the tool produces. It does not explicitly contrast itself with siblings like update_webhook_subscription or renew_webhook_subscription, so it falls 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 Guidelines3/5

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

It discloses a real precondition ('Requires OURA_CLIENT_ID and OURA_CLIENT_SECRET environment variables'), which tells the agent what must be true before calling. However, it says nothing about when to create versus update, renew, or reuse an existing subscription, leaving the sibling routing entirely to inference.

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

delete_webhook_subscriptionA

Delete a webhook subscription. Requires OURA_CLIENT_ID and OURA_CLIENT_SECRET environment variables.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe webhook subscription ID

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 disclosure burden, and it offers a genuinely useful operational fact: the required OURA_CLIENT_ID and OURA_CLIENT_SECRET environment variables. However, for a destructive operation it omits whether deletion is permanent/irreversible, whether it is idempotent, and any error behavior, leaving notable gaps.

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

Conciseness5/5

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

Two short, front-loaded sentences with zero filler — the core action leads and the prerequisite follows. Every sentence 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?

For a simple single-parameter delete tool this covers the essentials (action plus auth requirement), but with no annotations and no output schema, it leaves the irreversibility and post-delete behavior of a destructive call unstated.

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

Parameters3/5

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

Schema description coverage is 100% and there is only one parameter ('id', already documented as 'The webhook subscription ID'), so the schema does the heavy lifting. The description adds no additional meaning about the id format or source, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Delete a webhook subscription'), which cleanly separates it from the list_/get_/create_/update_/renew_webhook_subscription siblings. An agent can identify exactly what this does without opening the schema.

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

Usage Guidelines2/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 gives no guidance on when to delete versus updating or renewing a subscription, nor any exclusions or prerequisites beyond the auth note. Usage must be inferred 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.

get_daily_activityC

Get daily activity data including steps, calories, activity levels, and MET data. Returns activity score with contributors like meeting daily targets, movement frequency, recovery time, and training metrics.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
next_tokenNo
start_dateNo

TDQS

C2.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. While it describes the returned data fields, it omits critical traits such as read-only nature, pagination behavior via next_token, date format expectations, and authentication or rate-limit requirements.

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 two sentences and front-loads the core purpose before detailing return values. It is efficient with no wasted words, though the second sentence could be slightly tighter.

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 three undocumented parameters, no annotations, and no output schema, the description should provide more context on parameter usage and pagination. It covers purpose and output fields but leaves major gaps in how to call the tool correctly.

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 schema description coverage is 0% for all three parameters (start_date, end_date, next_token). The description does not mention any parameter names, formats, or purposes, leaving their semantics entirely undocumented.

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 (daily activity data) and enumerates the returned metrics, distinguishing it from sleep or heart-rate siblings. However, it does not differentiate itself from get_daily_activity_by_id or explain the scope difference, so sibling differentiation is absent.

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 alternatives like get_daily_activity_by_id, nor does it state prerequisites or exclusions. Usage is only implied by the tool name and generic purpose.

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

get_daily_activity_by_idB

Get a single daily activity document by its unique ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesThe unique document ID

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 full behavioral burden. It does not state that this is a read-only operation, nor does it mention authentication requirements, rate limits, error behavior (e.g., missing ID), or response format. The minimal text adds no behavioral context beyond the implied read.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with zero wasted words. It efficiently conveys the tool's purpose and is appropriately sized for a simple getter.

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 simplicity (1 required param, 100% schema coverage, no output schema, no annotations), the description is adequate but has clear gaps. It doesn't clarify that this is a safe read, what the return structure looks like, or how errors are handled, which are important when no annotations or output schema exist.

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

Parameters3/5

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

Schema description coverage is 100%, so the input schema already fully documents the single required parameter. The description adds no syntax, format, or validation details beyond what the schema provides, making the baseline 3 appropriate.

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

Purpose4/5

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

The description states a specific verb (Get), resource (daily activity document), and scope (single, by unique ID). It implicitly distinguishes from the sibling get_daily_activity (which likely returns a collection) by specifying 'single' and 'by its unique ID', but does not explicitly name the 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?

The description offers no guidance on when to use this tool versus alternatives like get_daily_activity, nor does it list prerequisites. It simply states what the tool does, leaving the agent to infer usage from the name and siblings.

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

get_daily_cardiovascular_ageC

Get daily cardiovascular age data. Returns vascular age estimates based on physiological measurements.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
next_tokenNo
start_dateNo

TDQS

C2.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 full burden, but it does disclose that the operation is a read and describes the returned content (vascular age estimates). It omits pagination behavior despite a next_token parameter, and says nothing about auth, rate limits, or default date windows.

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?

Two compact sentences with the core purpose front-loaded and no filler. The second sentence is mildly redundant with the first but does add the nature of the return 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?

A read tool with no annotations, no output schema, and three entirely undocumented parameters leaves meaningful gaps: how the date range defaults, how next_token pagination works, and what fields the vascular age estimate contains. The description is too thin for the parameter surface.

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?

Schema description coverage is 0% for three parameters (start_date, end_date, next_token), and the description adds no meaning for any of them—no date format, default range, or pagination semantics. The description does not compensate for the schema gap.

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 ('daily cardiovascular age data') and clarifies that it returns vascular age estimates from physiological measurements. The 'daily' framing implicitly separates it from the singular get_daily_cardiovascular_age_by_id sibling, though it does not name that sibling explicitly.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus get_daily_cardiovascular_age_by_id, get_vo2_max, or other daily health metrics, and no stated prerequisites or date-range context. The agent must infer usage 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.

get_daily_cardiovascular_age_by_idC

Get a single daily cardiovascular age document by its unique ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesThe unique document ID

TDQS

C2.7/5.0
Behavior1/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 doesn't state whether this is a read-only operation or what happens on invalid ID. Basically zero behavioral disclosure beyond the verb 'Get'.

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

Conciseness4/5

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

One concise sentence with no waste. Front-loaded and clear, though it could be slightly more informative.

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

Completeness2/5

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

Given no annotations, no output schema, and no additional context, the description is minimal. It doesn't cover return format, error handling, or usage context, leaving significant gaps 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 coverage is 100% with the single required parameter 'document_id' fully described. The description adds no additional meaning beyond what the schema already provides, so baseline 3 is appropriate.

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

Purpose4/5

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

States a clear verb (Get) and resource (a single daily cardiovascular age document) distinguished by 'by its unique ID' from the sibling get_daily_cardiovascular_age. However, it doesn't explicitly name the alternative or explain the distinction beyond the suffix.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus the list version. It merely describes the operation without context. No prerequisites or alternatives mentioned.

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

get_daily_readinessC

Get daily readiness scores with contributor breakdown. Returns readiness score with contributors like activity balance, body temperature, HRV balance, recovery index, and sleep metrics.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
next_tokenNo
start_dateNo

TDQS

C2.7/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, and it is thin: nothing about pagination behavior despite a next_token parameter, nothing about date-range defaults, history limits, or permissions. The only behavioral disclosure is the shape of the payload, which is useful but not enough for a tool with zero annotation coverage.

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?

Two tight sentences with the purpose front-loaded and no filler. The second sentence slightly restates the first ('readiness score with contributors' after 'with contributor breakdown'), which is minor redundancy rather than bloat.

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 parameterized, paginated retrieval tool with no annotations, no output schema, and 0% parameter documentation, the description leaves too much unspecified. An agent still cannot determine valid date formats, whether a range is required, or how to page through results.

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?

Schema description coverage is 0% for all three parameters (start_date, end_date, next_token), so the description must compensate and does not. 'Daily' hints at a date-scoped query, but the description never explains the date format, inclusive/exclusive bounds, defaults, or what next_token is for.

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 daily readiness scores') and adds the payload shape ('with contributor breakdown'), so an agent knows exactly what is returned. It does not, however, distinguish itself from the sibling get_daily_readiness_by_id, which is the obvious confusion point in this family.

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 get_daily_readiness_by_id or the other daily-metric tools. No prerequisites, no mention of when the returned data exists (e.g. after the ring has synced), and no exclusions.

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

get_daily_readiness_by_idB

Get a single daily readiness document by its unique ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesThe unique document ID

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 full disclosure burden. 'Get' correctly signals a non-destructive read of a single record, which is the key trait, but it says nothing about return shape, missing-ID/404 behavior, pagination, 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?

One short sentence, front-loaded with the verb and resource, with no filler or redundancy.

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

Completeness4/5

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

For a one-parameter read tool with a fully documented schema, the essential information is present. The remaining gaps (output shape, error behavior on unknown IDs) are minor for a simple 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?

Schema description coverage is 100% for the single parameter document_id, so the schema already carries the semantics; the description's 'by its unique ID' merely restates it without adding format or sourcing details. Baseline 3 applies.

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

Purpose4/5

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

States a specific verb (Get), resource (daily readiness document), scope (single) and lookup key (unique ID), which implicitly separates it from the sibling get_daily_readiness that returns a collection. It does not name that sibling explicitly, so it falls short of full sibling differentiation.

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

Usage Guidelines2/5

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

No when-to-use statement, no prerequisite (where the document_id comes from), and no mention of the list sibling get_daily_readiness as the alternative when the ID is unknown. Usage is only inferable from the name and 'by its unique ID'.

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

get_daily_resilienceB

Get daily resilience data. Returns resilience level and contributors like sleep recovery, daytime recovery, and stress.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
next_tokenNo
start_dateNo

TDQS

B3/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses what the response contains (resilience level and contributors), but omits pagination behavior despite a next_token parameter, says nothing about date-range defaults, and gives no indication of auth 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.

Conciseness4/5

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

Two tightly written sentences with the purpose front-loaded and the return contents summarized in the second. Little waste, though the second sentence could have instead spent space on the date/pagination semantics that are actually missing.

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?

No output schema exists, so the description's summary of return values is genuinely useful, but for a paginated date-range list tool with three undocumented parameters and no annotations, the description leaves key invocation details (range semantics, paging) unstated.

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?

Schema description coverage is 0% and there are three parameters (start_date, end_date, next_token), none of which the description explains. Date format, whether the range is inclusive, and how next_token is used are all undocumented in both the schema and the description.

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 daily resilience data') and even previews the payload (resilience level, sleep/daytime recovery, stress contributors). It does not, however, distinguish this range/list tool from the sibling get_daily_resilience_by_id, which an agent also sees.

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 versus the many sibling daily-metric tools (daily stress, readiness, sleep) or versus get_daily_resilience_by_id. The date-range nature of the call is left entirely for the agent to infer from the schema.

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

get_daily_resilience_by_idB

Get a single daily resilience document by its unique ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesThe unique document ID

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. 'Get' implies a read-only operation, but there is no disclosure of error behavior, return format, 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?

A single, front-loaded sentence with no redundant words. It is appropriately sized for a simple get-by-ID tool.

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 read with one fully described parameter, the description states the core action. However, with no annotations and no output schema, it omits return format, error handling, and any sibling routing, leaving notable 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?

Schema coverage is 100% and the single parameter is fully described in the schema. The description adds no additional syntax or format details beyond 'by its unique ID', so baseline 3 applies.

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

Purpose4/5

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

States a specific verb 'Get' and resource 'daily resilience document', and scopes it to a single document by ID. This distinguishes it from the sibling list tool get_daily_resilience, though it does not name that sibling 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?

Implies usage when you have a unique document ID, but does not state when to use this versus the list tool or other alternatives, nor any 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_daily_sleepC

Get daily sleep scores and contributor breakdown. Returns sleep score with contributors like deep sleep, efficiency, latency, REM sleep, restfulness, timing, and total sleep.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
next_tokenNo
start_dateNo

TDQS

C2.6/5.0
Behavior2/5

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

There are no annotations, so the description carries full behavioral burden. It mentions return contributors but does not disclose pagination (implied by next_token), date range requirements, or whether results are limited to a single day. This leaves significant behavioral gaps for a data retrieval 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 concise, two sentences, and front-loads the purpose before listing contributors. No superfluous text. However, it could better structure the return details or scoping constraints.

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 has three parameters with no schema descriptions, no annotations, no output schema, and a complex sibling ecosystem. The description does not compensate for missing parameter semantics or behavioral traits like pagination and date filtering. It is incomplete for an agent to call correctly.

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?

Schema description coverage is 0%, meaning none of the three parameters (start_date, end_date, next_token) are documented in the schema. The description adds no meaning for these parameters, providing no syntax, format, or purpose information. This is a critical deficiency.

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 daily sleep scores and contributor breakdown.' It distinguishes the resource (daily sleep scores) from siblings like get_sleep (raw sleep data) or get_sleep_time. However, it does not explicitly name an alternative or clarify how it differs from get_sleep_by_id and get_daily_sleep_by_id, so it falls 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?

No guidance is provided on when to use this tool versus alternatives such as get_sleep, get_sleep_by_id, or get_daily_sleep_by_id. The description implies usage (retrieve daily sleep scores) but offers no conditions, exclusions, or routing hints.

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

get_daily_sleep_by_idB

Get a single daily sleep document by its unique ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesThe unique document ID

TDQS

B3.1/5.0
Behavior2/5

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

No annotations provided, so the description carries the full behavioral burden. It doesn't state whether the operation is read-only, what happens if the ID is invalid or missing, or any return format 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?

A single, efficient sentence with zero waste. Clear and front-loaded.

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?

Adequate for a simple one-parameter fetch tool. With no annotations and no output schema, the description could better disclose safety profile and return behavior, but it's sufficient for correct invocation given the clear parameter mapping.

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

Parameters3/5

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

Schema description coverage is 100% and the single parameter document_id is fully documented in the schema. The description merely restates 'unique ID' without adding format or meaning beyond the schema. Baseline 3 is appropriate when schema does the heavy lifting.

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

Purpose4/5

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

Clear specific verb+resource: fetch a single daily sleep document identified by unique ID. Distinguishes single-document fetch from listing siblings like get_daily_sleep, though it does not explicitly name the sibling it contrasts with.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs. get_daily_sleep or get_sleep_by_id. The 'by_id' naming implies a retrieval-by-identifier pattern, but no explicit context or alternatives are given.

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

get_daily_spo2C

Get daily blood oxygen saturation (SpO2) data. Returns average SpO2 percentage readings.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
next_tokenNo
start_dateNo

TDQS

C2.7/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 disclose behavioral traits. It mentions the return value ('average SpO2 percentage readings'), but omits pagination (next_token), date-range semantics, auth requirements, and error behavior. Minimal transparency.

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

Conciseness5/5

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

Two short sentences, front-loaded with the core purpose and return value. No filler; appropriate length for a simple getter.

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 0% schema coverage and no annotations, the description is too sparse: it leaves date filtering and pagination unexplained, making correct invocation difficult without outside knowledge.

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?

Schema description coverage is 0%, and the description provides no explanation of the three parameters (start_date, end_date, next_token). It does not compensate for the missing schema documentation.

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 ('daily blood oxygen saturation (SpO2) data'). It does not differentiate from the sibling get_daily_spo2_by_id, which fetches a single record by ID, so the agent must infer the distinction from the name 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?

No explicit when-to-use guidance or alternatives. The description only states what the tool returns; it does not mention when to choose it over get_daily_spo2_by_id or other daily metric tools.

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

get_daily_spo2_by_idB

Get a single daily SpO2 document by its unique ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesThe unique document ID

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 does not state that the operation is read-only/safe, what happens if the ID does not exist (error vs empty), or any timezone/date semantics of a 'daily' document. 'Get' weakly implies a read, but nothing is disclosed beyond 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?

A single short sentence with the resource and lookup key front-loaded. No padding or redundancy.

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 one-parameter read with full schema coverage and no output schema, the description is minimally sufficient. However, it omits lookup-failure behavior and daily-document semantics that an agent would want when the ID may be stale or invalid.

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

Parameters3/5

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

Schema coverage is 100% and the single 'document_id' parameter is already documented as 'The unique document ID'. The description adds nothing (e.g., ID format or source) beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb ('Get') and resource ('a single daily SpO2 document'), and the 'by its unique ID' phrasing distinguishes it from the list-style sibling get_daily_spo2. It stops short of explicitly naming that sibling, but the singular/ID framing makes the distinction 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?

Usage is only implied: the 'unique ID' requirement suggests the ID comes from a prior list call such as get_daily_spo2, but the description never says when to prefer this tool over the list variant or what to do if the ID is unknown. Adequate but with a clear gap.

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

get_daily_stressC

Get daily stress data. Returns stress levels including high stress time, recovery time, and day summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
next_tokenNo
start_dateNo

TDQS

C2.7/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 names the returned fields, but says nothing about pagination (a next_token param exists), default date behavior (no required params), auth requirements, 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.

Conciseness4/5

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

Two tight sentences with no filler, and the resource is front-loaded. Efficient, though brevity partly comes at the cost of the missing behavioral and parameter detail.

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, no annotations, and 0% parameter coverage, the description should do far more. Partial return-field listing is helpful, but a 3-param paginated tool still leaves date semantics and pagination unexplained.

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?

Schema description coverage is 0% for three parameters. The description does not explain start_date/end_date format or defaults, nor that next_token implies paginated paging, so it fails to compensate for the coverage gap.

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

Purpose4/5

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

States a specific verb and resource ('Get daily stress data') and adds what the result contains (high stress time, recovery time, day summary). However, it never distinguishes itself from the sibling get_daily_stress_by_id, so an agent must infer this is the date-range/list variant.

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 when-to-use guidance, no prerequisites, and no mention of the by-id alternative despite a near-identical sibling. The descripaiton only says what it returns, leaving tool selection entirely to inference.

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

get_daily_stress_by_idB

Get a single daily stress document by its unique ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesThe unique document ID

TDQS

B3.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 burden; it does imply a read-only, idempotent lookup by saying 'Get ... by its unique ID'. However, it says nothing about failure behavior when the ID is unknown or what fields the returned document contains.

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?

One short, front-loaded sentence with no wasted words. Nothing is redundant, though it is arguably too terse to be maximally informative.

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 no output schema and no annotations, the description covers the essential mechanics but omits what a 'daily stress document' represents and how a missing ID is handled. Adequate but with identifiable 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?

Schema description coverage is 100%: the single document_id parameter is fully documented in the schema as 'The unique document ID'. The description adds no format or sourcing detail beyond the schema, so the baseline 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?

States a specific verb ('Get') and resource ('a single daily stress document') scoped by unique ID, so the operation is unambiguous. It does not explicitly contrast with the sibling get_daily_stress, though the '_by_id' convention makes the distinction inferable.

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 explicit guidance on when to use this tool versus the list-style sibling get_daily_stress, nor any prerequisite such as needing a previously obtained ID. The correct usage can only be inferred from the naming convention.

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

get_enhanced_tag_by_idC

Get a single enhanced tag document by its unique ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesThe unique document ID

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 behavioral burden. 'Get' implies a safe read, but the description says nothing about authentication needs, what happens when the document_id does not exist, or what the returned 'enhanced tag document' contains. For a zero-annotation tool this is thin.

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?

One efficient sentence with the resource and key front-loaded and no filler. It could arguably be a touch richer, but nothing in it is wasted.

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 single-parameter lookup with full schema coverage, the description is minimally sufficient. With no output schema, however, it does not hint at the shape of the returned 'enhanced tag document' or how it differs from a plain tag, which is the one piece of context an agent could 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?

Schema description coverage is 100% and the single parameter (document_id) is already documented in the schema as 'The unique document ID'. The description repeats that concept without adding format, source, or example detail, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb ('Get') and resource ('enhanced tag document') plus the retrieval key ('unique ID'), so the core purpose is unambiguous. It does not, however, distinguish itself from the closely named sibling get_tag_by_id (non-enhanced) or from get_enhanced_tags (list), leaving the agent to infer the enhanced/non-enhanced distinction from the name 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 get_tag_by_id, get_enhanced_tags, or get_tags, nor any stated prerequisite such as needing an ID obtained from a list call. Usage is only implied by the name.

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

get_enhanced_tagsC

Get enhanced tags with additional metadata. Returns tags with type codes, time ranges, and comments.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
next_tokenNo
start_dateNo

TDQS

C2.7/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 disclosure burden. It hints at output content (type codes, time ranges, comments) but says nothing about pagination behavior, even though next_token strongly implies paged results, nor about filtering semantics, permissions, or result limits.

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?

Two short, front-loaded sentences with no filler. There is minor redundancy between 'additional metadata' and the enumerated fields, but the structure is efficient and readable.

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 annotations, no output schema, and three fully undocumented parameters, the description is too thin to support correct invocation. It omits pagination, filtering semantics, and any differentiator from the sibling tag tools, leaving real gaps an agent must guess at.

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?

Schema description coverage is 0%, so the description must compensate for all three parameters. It only loosely gestures at start_date/end_date via 'time ranges' and says nothing at all about next_token or its pagination role, leaving key parameters semantically unexplained.

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

Purpose4/5

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

States a specific verb and resource ('Get enhanced tags') and enumerates the payload (type codes, time ranges, comments), which is more than a title restatement. However, it never explains what makes these tags 'enhanced' versus the sibling get_tags, so an agent cannot confidently distinguish the two from the description 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 when-to-use guidance and no mention of the obvious alternatives get_tags or get_enhanced_tag_by_id. The closest thing to context is the implicit notion of retrieving tags over a time range, which the agent must infer.

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

get_heart_rateB

Get heart rate time series data. Returns heart rate readings (BPM) with timestamps and source information. Uses datetime range parameters instead of date range.

ParametersJSON Schema
NameRequiredDescriptionDefault
next_tokenNo
end_datetimeNo
start_datetimeNo

TDQS

B3/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It usefully discloses the return content (BPM readings with timestamps and source), but omits pagination behavior implied by next_token, as well as any auth or rate-limit 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?

Three sentences, front-loaded with purpose, no filler. The third sentence about datetime parameters is useful but could be integrated more tightly.

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 read tool with no output schema and no annotations, the description covers purpose, return shape, and parameter style. However, missing datetime format and pagination semantics leaves gaps that an agent must infer.

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?

Schema description coverage is 0%. The description loosely covers start_datetime and end_datetime by noting they are datetime ranges rather than date ranges, but gives no format details, and next_token is entirely unexplained.

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+resource ('Get heart rate time series data') and clarifies it returns raw readings rather than daily summaries. Distinguishes from date-range siblings by noting datetime range parameters, but does not explicitly name any sibling tool.

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 when-to-use guidance or alternatives are given. The datetime-vs-date note is a parameter format hint, not usage guidance, and there are no exclusions or prerequisites mentioned.

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

get_personal_infoA

Get personal information for the authenticated Oura user. Returns age, weight, height, biological sex, and email (if available).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations and no output schema, the description carries the full burden, and it does disclose the return shape (age, weight, height, biological sex, email) plus the notable 'if available' caveat on email. It also implies the scope is the authenticated user only. It stops short of stating auth failure behavior or whether values are cached/refreshed.

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

Conciseness5/5

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

Two sentences, front-loaded with the resource and actor, followed by the returned fields. No filler, no redundancy with the name.

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-only tool with no output schema and no annotations, the description supplies exactly the missing pieces: who the data is about and what fields come back. Nothing an agent needs to call it correctly is absent.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate; per the baseline for parameterless tools this scores 4. The description correctly adds no parameter claims, keeping it aligned with the empty 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 verb and resource ('Get personal information') scoped to 'the authenticated Oura user,' and enumerates the concrete fields returned. Against siblings that are all sleep/activity/webhook-specific, it is unmistakably the profile-retrieval tool.

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 rather than stated: there is no explicit 'use this when...' clause, no prerequisites, and no named alternatives. Since it is the only personal-info tool in the sibling set, the risk of misuse is low, but the description itself provides no routing guidance.

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

get_rest_mode_period_by_idA

Get a single rest mode period document by its unique ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesThe unique document ID

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. 'Get' implies a read-only single-record retrieval, but it does not disclose error behavior, auth requirements, or return format. Basic read semantics are present, but further behavioral traits are absent.

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

Conciseness5/5

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

One sentence, front-loaded with the verb and resource, with no redundant or filler text. Every word supports 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 one-parameter read tool, the description identifies the resource and the retrieval key. Missing output schema and not-found/error behavior keep it from a 5, but it is adequate for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so document_id is already fully documented. The description adds only that the ID is unique and selects a single document, which is marginal beyond the schema; the baseline of 3 applies.

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

Purpose5/5

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

States the specific verb 'Get', the resource 'rest mode period document', and the scope 'single ... by unique ID'. This clearly distinguishes it from the sibling list tool get_rest_mode_periods.

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 clear context: use this when you have a unique document ID to retrieve one record. It does not name alternatives or exclusions, so it falls short of the top score.

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

get_rest_mode_periodsC

Get rest mode period data. Returns information about when rest mode was activated, including episodes and tags.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
next_tokenNo
start_dateNo

TDQS

C2.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 mentions the return content but omits critical operational details: whether data is paginated (next_token suggests it is), whether authentication is required, whether it's read-only, and how start_date/end_date filter the results. These gaps are significant 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 two concise sentences that front-load the core purpose. No wasted words, though the second sentence is somewhat redundant ('Returns information about when rest mode was activated' repeats the first sentence's implication). Still, it's efficient and clear.

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

Completeness2/5

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

Given no annotations, no output schema, and 0% schema coverage across three parameters, the description is incomplete. It doesn't explain pagination behavior (next_token), date range filtering, or the structure of returned episodes/tags. For a tool with these complexities and no other documentation, the description should provide more operational context.

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 schema has 0% description coverage, so the description must compensate. It mentions 'when rest mode was activated' which loosely relates to start_date/end_date but provides no format, timezone, or range semantics. The next_token parameter is entirely unexplained. The description fails to add meaningful meaning beyond the bare parameter names.

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+resource: 'Get rest mode period data.' It clearly indicates what the tool returns (activation times, episodes, tags), distinguishing it from siblings like get_daily_sleep or get_personal_info. However, it does not explicitly differentiate from the one obvious sibling, get_rest_mode_period_by_id, which retrieves a single period.

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 the sibling get_rest_mode_period_by_id or explain conditions for using one over the other. It only implies usage by stating what the tool returns.

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

get_ring_configurationC

Get Oura Ring configuration details including color, design, size, firmware version, and hardware type. Returns information about the user's ring setup.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
next_tokenNo
start_dateNo

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It says it returns config data, but discloses nothing about auth needs, pagination, rate limits, or whether the result is a single ring or a collection — notable given the otherwise unexplained date-range and token parameters.

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?

Two short, front-loaded sentences with no wasted clauses. The second sentence ('Returns information about the user's ring setup') is largely redundant with the first, keeping it just short of 5.

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 no output schema and no annotations, the description does decently cover what comes back, but it omits any explanation of the three input parameters and their interaction (date range plus next_token strongly implies paginated history), which an agent needs to invoke this correctly.

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?

Schema description coverage is 0% with 3 parameters, and the description mentions none of them (start_date, end_date, next_token). It enumerates returned response fields instead of input parameters, leaving the date-range/pagination inputs entirely unexplained.

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?

Specific verb + resource ('Get Oura Ring configuration details') with an explicit enumeration of the fields returned (color, design, size, firmware, hardware type). It is clearly the list-style sibling to get_ring_configuration_by_id, though it never names that sibling to draw the contrast explicitly.

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 of when to call this versus the alternatives (e.g. get_ring_configuration_by_id, get_personal_info), no prerequisites, and no exclusions. Usage is only implied by the verb 'Get'.

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

get_ring_configuration_by_idA

Get a single ring configuration document by its unique ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesThe unique document ID

TDQS

A3.6/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 behavioral burden. 'Get' implies a non-mutating read, and for a single-document lookup there is little destructive behavior to disclose, but auth requirements, error behavior for unknown IDs, and rate limits are all unstated.

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 front-loaded sentence with no filler; the resource and lookup key are stated immediately and nothing is repeated.

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

Completeness4/5

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

For a one-parameter read tool with a fully documented schema and no output schema, the description covers what an agent needs to invoke it. It stops short of noting sibling routing or unknown-ID behavior, but those are minor for this complexity level.

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

Parameters3/5

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

Schema description coverage is 100% with one parameter, so the schema already documents document_id as 'The unique document ID'. The description restates the same idea without adding format, source, or example semantics, which is the expected baseline when the schema does the work.

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), resource (ring configuration document), and scope (single, by unique ID). It implicitly distinguishes itself from the sibling get_ring_configuration (list) via 'a single' and 'by its unique ID', though it never names that sibling 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?

Usage is only implied: the phrase 'by its unique ID' tells the agent this is the retrieval path when an ID is already known. It never states when to prefer this over get_ring_configuration or what to do if the ID is unknown.

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

get_session_by_idB

Get a single session document by its unique ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesThe unique document ID

TDQS

B3.1/5.0
Behavior2/5

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

No annotations, so the description carries full behavioral burden. It says nothing about read-only nature, error behavior for missing/invalid IDs, or return format despite no output schema.

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

Conciseness5/5

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

A single tight sentence with zero waste, front-loaded with the verb and resource.

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 single-param lookup this is minimally viable, but with no annotations and no output schema it omits the read-only guarantee, error semantics, and what a session document contains.

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

Parameters3/5

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

Schema coverage is 100% and the single parameter document_id is fully documented in the schema. The description adds no syntax or format detail beyond what the schema provides, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb (get) and resource (a single session document) scoped by unique ID. Clear but does not distinguish from sibling get_sessions (list) or the many other get_*_by_id siblings beyond the resource noun.

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 when-to-use guidance, no mention of the get_sessions sibling for listing, and no exclusions. The by-id naming implies a lookup pattern but nothing is explicit.

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

get_sessionsC

Get session data for activities like meditation, breathing exercises, and relaxation. Returns session details including heart rate, HRV, and mood data.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
next_tokenNo
start_dateNo

TDQS

C2.7/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 discloses the returned data categories (heart rate, HRV, mood), which is useful, but says nothing about pagination despite a next_token parameter, nothing about default date ranges, result caps, 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.

Conciseness4/5

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

Two tight sentences with no filler; the purpose is front-loaded and the return summary follows. Nothing is padded, though little is said.

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

Completeness3/5

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

There is no output schema and no annotations, so the description must supply context. It covers the resource and return fields reasonably, but is silent on pagination, filtering via start/end date, and scoping relative to the single-session sibling, leaving meaningful gaps for a query tool.

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?

Schema description coverage is 0% and the description mentions none of the three parameters (start_date, end_date, next_token). An agent gets no format, default, or date-range semantics from either the schema or the prose.

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

Purpose4/5

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

States a specific verb and resource ('Get session data') and enumerates the activity types covered (meditation, breathing, relaxation), which is more than a restatement of the name. It does not, however, explicitly distinguish itself from the sibling get_session_by_id, leaving the plural/singular split to inference.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites, and no mention of the obvious alternative get_session_by_id for fetching a single session. The plural name implies a list, which is the only usage signal present.

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

get_sleepC

Get detailed sleep data including sleep stages, heart rate, HRV, and breathing rate. Returns comprehensive sleep session data with durations for deep, light, REM sleep, and more.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
next_tokenNo
start_dateNo

TDQS

C2.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 describes some return content, but never states whether this is a read-only operation, what authentication is required, how pagination works, or whether it returns multiple sessions.

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 only two sentences and is front-loaded with the core action. The second sentence partly repeats the first with additional examples, but it remains compact and readable.

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 three undocumented parameters and no output schema, the description should explain the date-range filtering, pagination, and relationship to single-session siblings. It gives a general sense of returned data but omits the calling context an agent needs.

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 schema has 0% description coverage for three parameters: start_date, end_date, and next_token. The description does not mention any of these parameters, so it adds no meaning beyond the bare schema names.

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 detailed sleep data' and then lists specific data included. However, it does not distinguish this tool from close siblings like get_sleep_by_id, get_daily_sleep, or get_sleep_time, leaving the scope ambiguous.

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 such as get_sleep_by_id or get_daily_sleep. It also does not explain how the date-range or pagination parameters should be used.

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

get_sleep_by_idB

Get a single sleep document by its unique ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesThe unique document ID

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 behavioral burden, yet it only restates that a single record is returned. Nothing is said about not-found/error behavior, permissions, or the nature of the returned document — though 'Get' does weakly imply a safe read.

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, front-loaded sentence with no filler; the verb and resource come first and nothing is redundant.

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 read with no output schema, the description is minimally sufficient to invoke the tool correctly. It is thin on intent-signaling against the many similar sleep/list siblings, but nothing critical to correct invocation 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 coverage is 100% and the single document_id parameter is already documented in the schema, so the description adds no format or semantics beyond it. Baseline 3 applies when the schema does all the work.

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), resource (sleep document) and scope (single, by unique ID), which lets an agent distinguish it from list-style siblings like get_sleep or get_daily_sleep. It stops short of explicitly naming which sibling it competes with or clarifying the difference between a 'sleep document' and a 'daily sleep' record.

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 get_sleep, get_daily_sleep, or get_daily_sleep_by_id. The 'by_id' naming convention implies retrieval by identifier, but no explicit conditions, prerequisites, or alternatives are stated.

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

get_sleep_timeC

Get optimal bedtime recommendations and sleep timing data. Returns optimal bedtime windows and sleep timing recommendations.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
next_tokenNo
start_dateNo

TDQS

C2.4/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 behavioral burden, yet it says nothing about pagination (despite a next_token parameter), default date ranges, auth requirements, or what the returned 'windows and recommendations' actually contain. It only restates the surface purpose.

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 purpose is front-loaded, which is good, but the second sentence is pure redundancy that adds no new information, so the description is not efficient for its size.

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?

No annotations, no output schema, and three undocumented parameters leave significant gaps. For a retrieval tool, the description should at least clarify the date-range and pagination mechanics, which it entirely omits.

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?

Schema description coverage is 0% for three parameters (start_date, end_date, next_token), and the description adds no meaning for any of them. next_token clearly implies pagination, but the description never explains date formats, ranges, or paging behavior, so it fails to compensate for the coverage gap.

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?

It names a concrete verb+resource ('Get optimal bedtime recommendations and sleep timing data'), which is more specific than the generic get_sleep sibling. However, the second sentence merely restates the first in different words, and there is no differentiation from the sibling get_sleep_time_by_id, so an agent cannot tell the two apart from the description 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 versus alternatives. The presence of the sibling get_sleep_time_by_id suggests this is the range/list variant, but the description never states that, nor does it mention any prerequisites or when-not conditions.

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

get_sleep_time_by_idB

Get a single sleep time document by its unique ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesThe unique document ID

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 behavioral burden. It implies a read-only retrieval but omits permissions, error behavior, return format, and whether the operation has 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?

One short sentence with no filler, front-loading the verb and resource. Every word 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?

Adequate for a simple get-by-ID tool, but it does not differentiate from similar siblings or describe the returned document. With no output schema and no annotations, more context would help an agent avoid confusion.

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

Parameters3/5

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

Schema description coverage is 100% for the single required parameter, so baseline is 3. The description adds no syntax, format, or validation details beyond what the schema already provides.

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

Purpose4/5

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

States a specific verb 'Get' and resource 'sleep time document' with scope 'single ... by its unique ID'. This distinguishes it from list-style siblings like get_sleep_time, but it does not explicitly name alternatives or clarify how it differs from get_sleep_by_id or get_daily_sleep_by_id.

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 when-to-use guidance, no prerequisites, and no alternatives are mentioned. The need for an ID is implied by the schema, but the description itself provides no routing context.

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

get_tag_by_idB

Get a single tag document by its unique ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesThe unique document ID

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 behavioral burden. It doesn't say what happens on an invalid/unknown ID, whether the result is cached or rate-limited, or what a tag document contains. It does at least imply a safe read-only lookup via 'Get,' but little beyond that 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?

A single purpose-focused sentence with zero filler. The resource and identifying argument are stated up front and nothing is wasted.

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 low-complexity read with one fully documented parameter and no output schema, so the minimal description is broadly adequate. The main incompleteness is the lack of any differentiation from get_enhanced_tag_by_id and no note on error behavior, which matters given the crowded sibling namespace.

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?

Only one parameter (document_id) and schema description coverage is 100%, so the schema already documents the argument as 'The unique document ID.' The description adds nothing beyond the schema. Per the rubric, baseline 3 applies when schema coverage is high.

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

Purpose4/5

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

States a specific verb and resource: 'Get a single tag document by its unique ID.' This clearly identifies a retrieval operation for a single tag. However, it does not distinguish itself from the similar sibling get_enhanced_tag_by_id, which also retrieves a tag by ID, so the boundary between these two 'get tag by id' tools is left for the agent to infer.

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 clearly related get_enhanced_tag_by_id (or get_tags). With two near-identical 'by_id' tag retrievers in the sibling list, the absence of any disambiguation is a real routing gap; the description merely restates the operation.

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

get_tagsC

Get user-created tags for tracking various activities, behaviors, or conditions. Returns tag text, timestamp, and associated tag categories.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
next_tokenNo
start_dateNo

TDQS

C2.7/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 does disclose the returned content (tag text, timestamp, categories), which is useful, but says nothing about date-range scoping, pagination via next_token, permissions, or whether results are scoped to the authenticated user.

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?

Two tight sentences that front-load the core action and follow with the return content; nothing is wasted. Slightly short given the documentation gaps, but structurally sound.

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 zero annotation coverage, 0% schema coverage, and no output schema, the description leaves key behavior (date filtering, pagination, scope) unexplained. The return-value sentence helps, but the definition is not complete enough to invoke confidently.

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?

Schema description coverage is 0% across three parameters (start_date, end_date, next_token). The description never mentions date filtering or pagination, so it does not compensate for the undocumented schema; the agent cannot tell how these parameters behave.

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?

Specific verb+resource ('Get user-created tags') plus the subject matter it covers (activities, behaviors, conditions) and what it returns. It does not, however, distinguish itself from the sibling get_enhanced_tags, which appears to cover a similar resource.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites, and no mention of alternatives such as get_enhanced_tags or get_tag_by_id, despite those siblings existing. The agent must infer when this tool is preferable.

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

get_vo2_maxC

Get VO2 max estimates. Returns VO2 max values which indicate cardiovascular fitness level.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
next_tokenNo
start_dateNo

TDQS

C2.4/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. 'Get' implies a read, but it does not disclose that results are paginated (a next_token parameter exists), how date ranges default, or any permission/rate-limit behavior. It adds little beyond restating the metric name.

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?

Very short and front-loaded, which is good, but the second sentence ('Returns VO2 max values which indicate cardiovascular fitness level') is largely restatement rather than useful detail, so the space is not well spent.

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?

No annotations, no output schema, and three undocumented parameters: the description should explain date filtering and pagination to be callable correctly, and it does neither. For a paginated, date-ranged list endpoint this is a significant gap.

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?

Schema coverage is 0% and all three parameters (end_date, next_token, start_date) are undocumented in the schema. The description supplies no explanation of date formats, range semantics, or pagination tokens, so it completely fails to compensate.

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

Purpose4/5

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

States a specific verb and resource: 'Get VO2 max estimates' for cardiovascular fitness. However, it does not distinguish itself from the sibling get_vo2_max_by_id, leaving the agent to infer that this is the un-scoped list version.

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

Usage Guidelines2/5

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

No guidance on when to use this versus get_vo2_max_by_id, nor any mention of date-range filtering or pagination as a use condition. The agent must infer the list-vs-single distinction 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_vo2_max_by_idC

Get a single VO2 max document by its unique ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesThe unique document ID

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 behavioral burden, yet it says nothing beyond 'get'. It does not disclose auth/permission requirements, behavior on a missing or malformed ID, or what the returned document contains. For a read tool with zero annotation coverage this is a real 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?

One short sentence, front-loaded with the verb and resource, with no filler. It is efficient though arguably under-specified rather than optimized.

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?

A simple one-parameter read tool, so little is required, but with no output schema and no annotations the description could reasonably say what a VO2 max document reports or how errors surface. Adequate but leaves evident 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?

Schema description coverage is 100% for the single document_id parameter, so the schema already defines it; the description only restates that it is a unique ID. Baseline 3 applies when the schema does the heavy lifting.

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

Purpose4/5

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

States a specific verb (Get) and resource (a single VO2 max document) scoped to one item by unique ID, which clearly separates it from its list sibling get_vo2_max. It stops short of naming that sibling explicitly, so differentiation relies on the agent noticing the 'by_id' pattern rather than on stated contrast.

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 when-to-use guidance, no mention of when to prefer this over get_vo2_max, and no prerequisites stated. Usage is only implied by the name taking a document_id.

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

get_webhook_subscriptionA

Get details of a specific webhook subscription by ID. Requires OURA_CLIENT_ID and OURA_CLIENT_SECRET environment variables.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe webhook subscription ID

TDQS

A3.7/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 burden. It usefully discloses the auth requirement (OURA_CLIENT_ID and OURA_CLIENT_SECRET environment variables), which is real behavioral context beyond the schema, but it says nothing about read-only nature, rate limits, or error behavior for an invalid ID.

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?

Two tight sentences with the purpose front-loaded and the prerequisite second; nothing is wasted, though it is minimal rather than richly informative.

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

Completeness4/5

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

For a single-parameter read tool with no output schema, the description covers what the tool returns (details of one subscription) and the auth prerequisite, leaving only minor gaps such as error handling.

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

Parameters3/5

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

Schema description coverage is 100%, with 'id' fully documented as the webhook subscription ID, so the baseline is 3. The description adds no format or syntax detail beyond what the schema already states.

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

Purpose5/5

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

States a specific verb ('Get details of') and resource ('a specific webhook subscription by ID'), and the singular 'by ID' scope clearly distinguishes it from the sibling list_webhook_subscriptions.

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 by the 'by ID' phrasing, which suggests it is for retrieving one known subscription rather than enumerating, but no alternative sibling is named and no when-not condition is given.

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

get_workout_by_idC

Get a single workout document by its unique ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesThe unique document ID

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. It doesn't disclose what the response contains, whether auth/scope is required, error behavior for unknown IDs, or any rate limits—only that a document is fetched.

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

Conciseness4/5

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

A single tight sentence with the key concept front-loaded. Appropriately sized, though it says nothing that couldn't be assumed from the name.

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?

A simple one-parameter read tool with no output schema, so the description needn't explain returns. However, it omits source of the ID and any failure modes, leaving it only marginally adequate for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100% for the single parameter, so the schema already documents 'document_id' as the unique document ID. The description adds no format, source, or validation detail beyond that baseline.

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 (a single workout document) scoped by unique ID. The 'by_id' naming and the sibling set (get_workouts vs get_workout_by_id) make the single-vs-list distinction inferable, but the description itself doesn't articulate that contrast.

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

Usage Guidelines2/5

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

No guidance on when to use this versus list-style siblings like get_workouts, nor prerequisites such as needing a valid ID from a prior listing. Usage is only implied by the name.

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

get_workoutsC

Get workout data including activity type, duration, calories burned, and distance. Returns details about recorded workouts with start/end times and intensity levels.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
next_tokenNo
start_dateNo

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 behavioral burden, and it does disclose returned content (metrics, start/end times, intensity). However, it says nothing about pagination despite a next_token parameter, nor about date-range defaults, result limits, or ordering.

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?

Two compact sentences with the core purpose front-loaded and no filler. The second sentence partly restates the first's field list but adds temporal and intensity detail.

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, no output schema, and zero parameter documentation, the description is too thin. An agent cannot tell how to scope the query by date or how to page through results.

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?

Schema description coverage is 0% across three parameters, so the description must compensate and does not. It never mentions start_date, end_date, or next_token, their accepted formats, or that dates filter the returned workout set.

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 verb+resource (retrieve workout data) and enumerates the returned fields (activity type, duration, calories, distance, start/end times, intensity). It implies a collection-level listing that contrasts with the sibling get_workout_by_id, but never explicitly states that distinction.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no statement of prerequisites, and no explicit routing to alternatives such as get_workout_by_id. The plural scope is only implied by the wording, leaving the agent to infer that this is the list endpoint.

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

list_webhook_subscriptionsA

List all webhook subscriptions for your application. Requires OURA_CLIENT_ID and OURA_CLIENT_SECRET environment variables.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/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 required environment variables (OURA_CLIENT_ID and OURA_CLIENT_SECRET), which is useful authentication context. However, it does not state whether the operation is read-only, whether it paginates, or what happens on auth failure, leaving meaningful behavioral traits 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?

Two short sentences with no filler; the purpose is front-loaded and the environment variable requirement follows cleanly. 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 zero-parameter listing tool with no output schema, the description covers the core operation and the auth requirement. It is nearly complete, though it could mention pagination or return shape given the absence of an output schema.

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 there is no per-parameter meaning to convey. The description appropriately avoids parameter detail, and the baseline for zero 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 specific verb (List) and resource (webhook subscriptions) with clear scope ('for your application'). It is distinguishable from get_webhook_subscription (singular) and create/update/delete siblings by the plural listing verb, though it does not explicitly name them.

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?

Implies usage through the listing scope but gives no explicit when-to-use or when-not-to-use guidance relative to siblings like get_webhook_subscription or create_webhook_subscription. The agent can infer purpose but is not routed to alternatives.

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

renew_webhook_subscriptionA

Renew a webhook subscription to extend its expiration time. Webhook subscriptions expire after some time and need to be renewed. Requires OURA_CLIENT_ID and OURA_CLIENT_SECRET environment variables.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe webhook subscription ID

TDQS

A3.7/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 load. It usefully discloses that OURA_CLIENT_ID and OURA_CLIENT_SECRET environment variables are required, which is important auth context. It does not state whether this is a write operation with side effects, idempotency behavior, or what happens on success/failure.

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

Conciseness5/5

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

Three short sentences, no waste, and the core action is front-loaded. The second sentence justifies the operation and the third adds the auth requirement efficiently.

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 one-parameter mutation with no output schema, the description covers purpose, trigger, and auth setup. However, because there are no annotations, it should ideally disclose more about side effects, permissions, or error conditions to be fully self-contained.

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

Parameters3/5

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

Schema coverage is 100% and the single parameter (id) is fully documented as 'The webhook subscription ID'. The description adds no further parameter meaning beyond the schema, so the 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?

States a specific verb (renew) and resource (webhook subscription), and explains the effect (extend expiration time). This distinguishes it from the sibling update_webhook_subscription, which changes settings rather than expiration. The purpose is unambiguous.

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

Usage Guidelines3/5

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

The description gives the trigger condition: webhook subscriptions expire and need renewal. However, it does not explicitly say when to choose this over update_webhook_subscription or what conditions would make renewal inappropriate. Usage is implied but not fully guided.

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

update_webhook_subscriptionC

Update an existing webhook subscription. Requires OURA_CLIENT_ID and OURA_CLIENT_SECRET environment variables.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe webhook subscription ID
data_typeNo
event_typeNo
callback_urlNo
verification_tokenNo

TDQS

C2.7/5.0
Behavior2/5

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

No annotations provided, so the description carries the full behavioral burden. It discloses the auth requirement (OURA_CLIENT_ID/SECRET env vars), but says nothing about what happens to unspecified fields, whether updates are partial or full replacements, reversibility, or rate limiting for a mutation 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?

Two short sentences, no filler, front-loaded with the core action. Efficient, though it lacks any structural detail beyond the credential note.

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?

A mutation tool with no annotations, no output schema, 5 params at 20% coverage, and nested objects. The description doesn't state that `id` is required, doesn't explain updatable fields, and offers nothing on partial vs full update semantics.

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?

Schema description coverage is only 20% (only `id` is documented). Five parameters include nested objects (data_type, event_type) with no description, and callback_url/verification_token are bare. The description provides no parameter information to compensate for the low 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?

States a specific verb+resource: 'Update an existing webhook subscription.' Clearly distinguishable from siblings like create_webhook_subscription, delete_webhook_subscription, and renew_webhook_subscription. Does not restate the name tautologically.

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 when-to-use guidance, no alternatives named, no prerequisites stated beyond the credential requirement. Among siblings that include create/delete/renew/get/list for the same webhook resource, no routing help is provided.

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. 40 tool updatesv1.0.0
    • First observedcreate_webhook_subscription
    • First observeddelete_webhook_subscription
    • First observedget_daily_activity
    • First observedget_daily_activity_by_id
    • First observedget_daily_cardiovascular_age
    • First observedget_daily_cardiovascular_age_by_id
    • First observedget_daily_readiness
    • First observedget_daily_readiness_by_id
    • First observedget_daily_resilience
    • First observedget_daily_resilience_by_id
    • First observedget_daily_sleep
    • First observedget_daily_sleep_by_id
    • First observedget_daily_spo2
    • First observedget_daily_spo2_by_id
    • First observedget_daily_stress
    • First observedget_daily_stress_by_id
    • First observedget_enhanced_tag_by_id
    • First observedget_enhanced_tags
    • First observedget_heart_rate
    • First observedget_personal_info
    • First observedget_rest_mode_period_by_id
    • First observedget_rest_mode_periods
    • First observedget_ring_configuration
    • First observedget_ring_configuration_by_id
    • First observedget_session_by_id
    • First observedget_sessions
    • First observedget_sleep
    • First observedget_sleep_by_id
    • First observedget_sleep_time
    • First observedget_sleep_time_by_id
    • First observedget_tag_by_id
    • First observedget_tags
    • First observedget_vo2_max
    • First observedget_vo2_max_by_id
    • First observedget_webhook_subscription
    • First observedget_workout_by_id
    • First observedget_workouts
    • First observedlist_webhook_subscriptions
    • First observedrenew_webhook_subscription
    • First observedupdate_webhook_subscription

TDQS

B3.1/5.0

Scored across 40 tools

Disambiguation4/5

Tools are mostly distinct: each data type typically has a list and a by_id variant, and descriptions clarify the difference. However, some pairs like get_sleep vs get_daily_sleep or get_tags vs get_enhanced_tags require careful reading, which could cause occasional misselection.

Naming Consistency4/5

Consistent snake_case with a get_ / get_..._by_id pattern for most data tools, and list_/get_/create_/update_/delete_ for webhooks. Minor inconsistency: list operations sometimes use singular nouns (get_sleep) and sometimes plural (get_workouts), and get_rest_mode_periods pairs with a singular by_id tool.

Tool Count2/5

40 tools is heavy for the apparent scope; many are thin list/by_id pairs that could be merged or parameterized. While each maps to an API endpoint, the count feels excessive and increases cognitive load.

Completeness5/5

Covers the full Oura v2 API surface: personal info, all health metrics with list and by_id, workouts, sessions, tags, enhanced tags, ring config, and full webhook CRUD plus renew. No obvious missing endpoints for the domain.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that provides access to Oura Ring health and fitness data through the Oura API v2, enabling retrieval of sleep, activity, readiness, and other health metrics.
    54 npm
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A Python-based Model Context Protocol server that provides AI assistants with access to Oura Ring health and fitness data across 15+ endpoints. It enables querying metrics like sleep, activity, readiness, and cardiovascular health through simple authentication and date-range filtering.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides access to Oura Ring health data, including sleep, activity, readiness, and stress metrics via the Model Context Protocol. It enables users to query their personal biometric information and daily health summaries through natural language in MCP-compatible clients.
    1,020 npm
    MIT
  • A
    license
    B
    quality
    A
    maintenance
    Local-first MCP server that connects AI agents to your Oura Ring readiness, sleep, activity, and HRV data. Tokens never leave your machine.
    27
    396 npm
    4
    MIT