Skip to main content
Glama
hadidwirsty

intervals-icu-mcp

by hadidwirsty

Intervals.icu MCP Server & AI Running Coach

License: MIT Node.js Version TypeScript Model Context Protocol Tests

An official-grade Model Context Protocol (MCP) Server and AI Running Coach Intelligence System for Intervals.icu.

Empower your AI assistants (Claude Desktop, Antigravity, Cursor, VS Code Cline / Roo-Code) to read real-time telemetry, evaluate acute & chronic training load (CTL/ATL/TSB/ACWR), compute Jack Daniels VDOT & pace zones, calculate cardiac drift & aerobic decoupling, predict race times, schedule tapering, and publish structured workouts directly to your Intervals.icu calendar.


๐Ÿ“‘ Table of Contents


Related MCP server: Intervals.icu MCP Server

โœจ Key Capabilities

  • ๐Ÿƒ Real-time Telemetry & Stream Ingestion: Extract watts, heart rate, cadence, velocity, and interval splits from completed sessions.

  • โšก Aerobic Decoupling & Cardiac Drift Engine: Compute Efficiency Factor (EF) $H_1$ vs $H_2$ to detect cardiovascular drift (>5%) or dehydration.

  • ๐Ÿฉน Unified Recovery & Readiness Scoring: 0โ€“100% composite score combining TSB, ACWR, Sleep Score, HRV, and RHR Spike into Green/Yellow/Red action signals.

  • ๐Ÿ† Race Time Predictor & Tapering Planner: Jack Daniels VDOT formula + CTL fitness and TSB freshness adjustments + 2โ€“3 week volume reduction generator.

  • โš–๏ธ ACWR & Weekly Load Budgeting: Safe volume progression caps (Long Run 30โ€“35%, Quality 15โ€“20%, Easy 45โ€“55%) based on 42-day rolling baseline.

  • ๐Ÿ“… Structured Workout Builder: Publish workouts to the Intervals.icu calendar using native Intervals Text DSL (Warmup, Main Set Nx, Cooldown).


๐Ÿš€ 3-Minute Quickstart

1. Prerequisites

  • Node.js: >= 18.0.0

  • Package Manager: pnpm (recommended), npm, or yarn

  • Intervals.icu Account & API Key

2. Clone & Build

git clone https://github.com/hadidwirsty/intervals-icu-mcp.git
cd intervals-icu-mcp
pnpm install
pnpm run build

โš™๏ธ Configuration

Retrieve your credentials from Intervals.icu Settings:

  1. Scroll down to the Developer section.

  2. Copy your API Key (e.g. your_api_key_here).

  3. Note your Athlete ID (found in settings or profile URL, e.g. i12345 or use self).

Environment Variables

Variable

Required

Description

INTERVALS_API_KEY

Yes

Your personal Intervals.icu API Key.

INTERVALS_ATHLETE_ID

Optional

Default Athlete ID (default: self). Can be overridden per call.


๐Ÿ”Œ MCP Client Setup Guides

1. Claude Desktop

Add the following to your claude_desktop_config.json:

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

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

{
  "mcpServers": {
    "intervals-icu": {
      "command": "node",
      "args": ["/ABSOLUTE/PATH/TO/intervals-icu-mcp/dist/index.js"],
      "env": {
        "INTERVALS_API_KEY": "YOUR_API_KEY_HERE",
        "INTERVALS_ATHLETE_ID": "self"
      }
    }
  }
}

2. Antigravity

In your Antigravity MCP settings or .gemini/config/mcp.json:

{
  "mcpServers": {
    "intervals-icu": {
      "command": "node",
      "args": ["/ABSOLUTE/PATH/TO/intervals-icu-mcp/dist/index.js"],
      "env": {
        "INTERVALS_API_KEY": "YOUR_API_KEY_HERE",
        "INTERVALS_ATHLETE_ID": "self"
      }
    }
  }
}

3. Cursor

In Cursor Settings > Features > MCP Servers or .cursor/mcp.json:

{
  "mcpServers": {
    "intervals-icu": {
      "command": "node",
      "args": ["/ABSOLUTE/PATH/TO/intervals-icu-mcp/dist/index.js"],
      "env": {
        "INTERVALS_API_KEY": "YOUR_API_KEY_HERE",
        "INTERVALS_ATHLETE_ID": "self"
      }
    }
  }
}

4. VS Code (Cline / Roo-Code)

In cline_mcp_settings.json:

{
  "mcpServers": {
    "intervals-icu": {
      "command": "node",
      "args": ["/ABSOLUTE/PATH/TO/intervals-icu-mcp/dist/index.js"],
      "env": {
        "INTERVALS_API_KEY": "YOUR_API_KEY_HERE",
        "INTERVALS_ATHLETE_ID": "self"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}

๐Ÿค– AI Skills & Slash Commands Directory

This repository comes pre-loaded with 11 Production-Ready Modern Skills in .agents/skills/ that you can trigger using slash commands (with first-class support for autonomous agent discovery):

๐Ÿ“– Comprehensive Usage Guide: For an in-depth operational timeline of when and how to run each command across macrocycles, mesocycles, and daily routines, see docs/WORKFLOWS-GUIDE.md.

Slash Command

Skill File

Description & Methodology

/run-report

SKILL.md

Post-workout coaching report analyzing watts/HR adherence, interval breakdown, EF, and cardiovascular drift.

/readiness-check

SKILL.md

Daily recovery & readiness score evaluation (0โ€“100% Green/Yellow/Red) based on TSB, ACWR, Sleep, and RHR spike.

/cardiac-drift

SKILL.md

Telemetry stream analysis (HR vs Power/Speed) computing $H_1$ vs $H_2$ Efficiency Factor (EF) and Aerobic Decoupling %.

/predict-race

SKILL.md

Estimate 5K, 10K, HM, FM finish times & pace via VDOT with CTL/TSB adjustments + 2โ€“3 week tapering volume schedule.

/fitness-status

SKILL.md

Complete training load analysis (CTL Fitness, ATL Fatigue, TSB Form, Ramp Rate Risk, and Deload detection).

/weekly-budget

SKILL.md

Weekly budget & session allocation via Palladino CTL Multiplier (Easy 0.7โ€“0.9x, Quality 1.25โ€“1.75x, Long Run 1.5โ€“2.0x CTL) with Single Run Safeguard.

/mesocycle-block

SKILL.md

5-Week Double Build Mesocycle (Coach Salman: W1 Base, W2-3 Build (+3โ€“5%), W4 Deload (-10% from W1), W5 New Base).

/backcast-plan

SKILL.md

Backward planning macrocycle from Target Race Day A (13 Weeks HM, 18 Weeks FM) with Race A/B/C hierarchy.

/calc-vdot

SKILL.md

Offline Jack Daniels VDOT and 5 pace training zones calculator (Easy, Marathon, Threshold, Interval, Repetition).

/check-workout

SKILL.md

View upcoming scheduled workouts from your Intervals.icu calendar with resolved targets.

/create-workout

SKILL.md

Publish structured running workouts to your calendar using Intervals Text DSL (auto-sync to Garmin/Coros).


๐Ÿ‘ค Customizing Your Athlete Profile

To give your AI Assistant accurate coaching context, configure your profile in .agents/skills/running-coach-analysis/SKILL.md:

  1. Section 2 (Athlete Profile): Fill in your name, age, fallback weight, and target race goals.

  2. Section 3 (Physiological Baseline): Provide fallback CP/FTP, LTHR, Max HR, and Resting HR (note: active values are automatically synced dynamically via MCP).

  3. Section 4 (Weekly Structure & Blueprints): Define your weekly training frequency, preferred workout sessions (e.g. Subthreshold, VO2Max, Long Run), and specific power/pace targets.


๐Ÿ’ฌ Example Chat Prompts

Here are examples of how you can chat with your AI Running Coach:

1. Daily Post-Run Evaluation

"Here is my workout from this morning. Please run /run-report on my latest activity. RPE was 6/10, legs felt springy during the 3rd interval."

2. Pre-Workout Readiness Check

"/readiness-check โ€” Am I well-recovered for today's Subthreshold interval session, or should I cap intensity to Zone 2?"

3. Weekly Volume Allocation

"/weekly-budget distance โ€” What is my recommended total mileage and Long Run ceiling for this week?"

4. Race Day Prediction & Tapering

"/predict-race โ€” My active VDOT is 50 and my target Half Marathon race is on 2026-10-15. Give me finish time prediction and 2-week tapering schedule."

5. Schedule a Workout to Calendar

"/create-workout โ€” Schedule a 50-minute Subthreshold session (Warmup 12m, 6x3m @ 95-98% CP with 1m rest, Cooldown 6m) for tomorrow."


๐Ÿ› ๏ธ Full MCP Tools Reference

The server exposes 20+ tools grouped by category:

๐Ÿƒ 1. Activities & Streams

  • get_activities: Fetch activities within a date range (oldest, newest, type).

  • get_activity_details: Retrieve full telemetry, metrics, and athlete physiological values for an activity ID.

  • get_activity_intervals: Extract lap and work/rest interval breakdowns.

  • get_activity_streams: Access raw time-series stream data (watts, heartrate, cadence, velocity_smooth, altitude).

  • get_activity_messages: Read activity comments and notes.

  • add_activity_message: Post coaching feedback to an activity.

๐Ÿ‘ค 2. Athlete Biometrics & Zones

  • get_athlete_profile: Retrieve athlete profile (FTP, LTHR, Max HR, weight, resting HR).

  • get_training_zones: Access power, heart rate, and pace training zone boundaries.

๐Ÿงฎ 3. Physiology & Endurance Intelligence (Offline)

  • calculate_vdot: Compute Jack Daniels VDOT & VOโ‚‚max from race/tempo time trial.

  • calculate_pace_zones: Compute 5 pace training zones (Easy, Marathon, Threshold, Interval, Repetition) in MM:SS/km.

  • predict_race_time: Predict race finish time and pace (5K, 10K, HM, FM, or custom km) from VDOT with CTL fitness and TSB freshness adjustments.

  • calculate_taper_plan: Generate weekly volume reduction schedule (75% โ†’ 50% โ†’ 30%) for peak TSB freshness on race day.

  • analyze_cardiac_drift: Compute Efficiency Factor (EF) and Aerobic Decoupling % from raw telemetry streams (heartrateStream, powerOrSpeedStream).

  • calculate_readiness_score: Compute unified recovery score (0โ€“100%, Green/Yellow/Red) combining TSB, ACWR, Sleep, HRV, and RHR.

โš–๏ธ 4. Training Load & Periodization (Offline)

  • analyze_training_load: Compute ACWR (ATL/CTL), classify TSB readiness zones, and evaluate ramp rate injury risk.

  • calculate_weekly_budget: Calculate safe weekly training budget (Total Volume, Long Run 30โ€“35%, Quality 15โ€“20%, Easy 45โ€“55%) based on 42d rolling average.

๐Ÿ“… 5. Calendar & Workout Builder

  • get_events: Retrieve calendar items (planned workouts, notes, races) in date range.

  • get_event_by_id: Get detailed event data by ID.

  • create_running_workout: Structured Workout Builder โ€” Validate and publish structured workouts to Intervals.icu calendar using Text DSL.

  • add_or_update_planned_workout: Create or update planned workout events.

  • add_or_update_note: Add text notes to calendar dates.

  • delete_event: Remove calendar events by ID.

  • get_workout_library: Search workout template library.

  • get_workout_by_id: Get workout template details.

๐Ÿšด 6. Gear & Power Curves

  • get_gear_list: List registered bikes, shoes, and equipment with mileage (cached 30m).

  • get_athlete_power_curves: Fetch power duration curves (cached 60m).

๐Ÿ’š 7. Wellness & Fitness Time-Series

  • get_wellness_data: Retrieve daily wellness entries (sleep score, HRV, resting HR, fatigue, soreness, weight).

  • get_fitness_chart: Retrieve time-series fitness data (ctl, atl, tsb, rampRate, eftp).


๐Ÿงช Development & Testing

Run the full unit test suite:

# Run Vitest unit tests
pnpm test

# Build TypeScript
pnpm run build

# Watch mode during development
pnpm exec vitest

Includes 59+ unit tests covering API client auto-retry on HTTP 429, LRU TTL caching, Jack Daniels VDOT math, race prediction, cardiac drift analysis, recovery scoring, ACWR analytics, and workout DSL validation.


๐Ÿ“„ License

This project is licensed under the MIT License ยฉ Muhammad Hadid Wiransetyo.

Available Tools

19 tools
add_activity_messageAdd Activity MessageA

Tambahkan catatan/komentar baru ke sebuah aktivitas.

ParametersJSON Schema
NameRequiredDescriptionDefault
apiKeyNoOverride API key untuk request ini saja.
contentYesIsi pesan/catatan yang ingin ditambahkan.
activityIdYesActivity ID Intervals.icu.

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description bears the full burden of behavioral disclosure. It only states that the tool adds a note/comment, but does not mention authentication requirements, whether the activity must already exist, idempotency, return behavior, or side effects. For a mutation tool, this is a significant gap.

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

Conciseness5/5

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

One sentence, front-loaded with the action verb and resource. No unnecessary words or repetition; every word contributes to understanding.

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

Completeness3/5

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

The tool is simple and the schema fully documents parameters, so the description meets the minimum for invocation. However, the lack of annotations, output schema, and behavioral context (e.g., expected response or error handling) leaves notable gaps in the overall context.

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

Parameters3/5

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

Schema coverage is 100%, with each parameter having a description. The tool description adds minimal semantic value beyond the word 'comment' for content, but the schema already provides sufficient information for parameter meaning.

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

Purpose5/5

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

The description uses a specific verb ('Tambahkan' = add) and identifies the resource ('catatan/komentar baru ke sebuah aktivitas' = new note/comment to an activity). This clearly differentiates it from sibling read tools like get_activity_messages and from the more general add_or_update_note.

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

Usage Guidelines3/5

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

The description implies the use case: adding a new message/comment to a specific activity. However, it provides no explicit exclusions, alternatives, or context on when this tool should be preferred over add_or_update_note or other activity-related tools. Usage is implied rather than guided.

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

add_or_update_noteAdd or Update NoteA

Buat atau update catatan teks biasa (kategori NOTE) di kalender Intervals.icu.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesJudul catatan.
colorNoWarna catatan, contoh: green, orange, red, blue. Default green.
apiKeyNoOverride API key untuk request ini saja.
eventIdNoEvent ID untuk update. Kosongkan untuk membuat catatan baru.
athleteIdNoAthlete ID Intervals.icu. Default dari INTERVALS_ATHLETE_ID.
startDateNoTanggal catatan, format YYYY-MM-DD. Default hari ini.
descriptionYesIsi catatan (plain text).

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden. It discloses the mutation action (create/update) and the note type, but does not mention permissions, what happens to existing notes, response format, or other side effects.

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

Conciseness5/5

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

The description is a single sentence in Indonesian, front-loading the action and adding the category context. It contains no filler or redundancy, making it highly concise and well-structured.

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

Completeness3/5

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

The tool is relatively simple and the schema covers all parameters. However, the description does not explain the create-vs-update behavior triggered by eventId, nor does it mention authentication or output; given the lack of annotations, a bit more context would be beneficial.

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

Parameters3/5

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

The input schema has 100% coverage with detailed descriptions for all 7 parameters, including defaults and field-specific purposes. The description adds no additional parameter information, which is acceptable given the schema's completeness.

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

Purpose5/5

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

The description clearly states the specific verb 'create or update', the resource 'plain text note (category NOTE)', and the scope 'in the Intervals.icu calendar'. This differentiates it from sibling tools for workouts, custom items, and events.

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 context is implied: this tool handles plain-text notes in the calendar, as opposed to workouts/custom items/events. However, the description does not explicitly state when to use this tool versus alternatives, nor does it provide exclusions or specific use cases.

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

add_or_update_planned_workoutAdd or Update Planned WorkoutA

Buat atau update planned workout (event kalender kategori WORKOUT) di Intervals.icu. Kirim event_id untuk update, kosongkan untuk membuat baru. workoutDoc opsional untuk mendefinisikan struktur steps (warmup/interval/cooldown, target power/hr/pace, dll โ€” ikuti format workout builder Intervals.icu).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesNama workout.
apiKeyNoOverride API key untuk request ini saja.
eventIdNoEvent ID untuk update. Kosongkan untuk membuat event baru.
distanceNoPerkiraan jarak dalam meter.
athleteIdNoAthlete ID Intervals.icu. Default dari INTERVALS_ATHLETE_ID.
startDateNoTanggal workout, format YYYY-MM-DD. Default hari ini.
movingTimeNoPerkiraan moving time dalam detik.
workoutDocNoStruktur workout Intervals.icu, contoh: { description, steps: [{ power: { value: 80, units: '%ftp' }, duration: 900, warmup: true }, ...] }.
workoutTypeYesTipe workout, contoh: Ride, Run, Swim, Walk, Row.

TDQS

A3.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden for behavioral disclosure. It explains the transaction semantics (create/update based on eventId) and mentions workoutDoc for steps, but does not disclose side effects, required permissions, potential overwriting behavior, or the response format. For a mutation tool with no annotations, this is a significant gap.

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

Conciseness5/5

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

The description is concise and front-loaded with the core purpose. It uses only two sentences to convey the resource, the create/update mechanism, and the optional workoutDoc structure. There is no wasted wording or repetition of schema details.

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 complexity (9 params, nested objects, no output schema, no annotations), the description provides a solid overview but lacks some completeness. It does not mention the required parameters (name, workoutType) or what the response looks like. It also does not advise how to obtain an event_id (e.g., via get_events). A more complete description would address these gaps, especially since there is no output schema to fall back on.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by clarifying eventId's behavior ('Kirim event_id untuk update, kosongkan untuk membuat baru') and by elaborating on workoutDoc's purpose (defining steps with warmup/interval/cooldown, target power/hr/pace). This enhances the parameter meaning beyond the raw schema definitions.

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

Purpose5/5

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

The description clearly states the tool's function: 'Buat atau update planned workout (event kalender kategori WORKOUT) di Intervals.icu.' It specifies the resource (planned workouts, calendar event category WORKOUT) and distinguishes it from siblings like add_or_update_note and delete_event. The verb 'Buat atau update' is specific and action-oriented.

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

Usage Guidelines4/5

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

The description provides explicit guidance on when to create vs update: 'Kirim event_id untuk update, kosongkan untuk membuat baru.' This clarifies the key decision point for using the tool. It does not explicitly name alternatives or exclusions, but the create/update distinction is clear and actionable.

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

create_custom_itemCreate Custom ItemA

Buat custom item baru (chart/field/zones) untuk seorang athlete. Catatan enum penting: field 'type' di dalam content untuk INPUT_FIELD/ACTIVITY_FIELD harus 'numeric' | 'text' | 'select' (bukan 'number'); field 'aggregate' harus MIN|SUM|MAX|AVERAGE (bukan AVG).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesNama custom item.
apiKeyNoOverride API key untuk request ini saja.
contentNoKonfigurasi konten custom item (object).
itemTypeYesTipe custom item.
athleteIdNoAthlete ID Intervals.icu. Default dari INTERVALS_ATHLETE_ID.
visibilityNoVisibilitas: PRIVATE, FOLLOWERS, atau PUBLIC.
descriptionNoDeskripsi custom item.

TDQS

A3.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 carry the full burden of behavioral disclosure. It does not state that this is a mutation that creates persistent state, whether any permissions are required, or how errors are handled. The only extra info is the enum note, which is parameter semantics, not behavior. This is a significant gap for a write operation.

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

Conciseness5/5

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

The description is extremely concise: two sentences. The first states the purpose, and the second delivers the most important caveat about enum values. Every sentence earns its place, and the critical note is front-loaded for discoverability.

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

Completeness3/5

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

The tool has 7 parameters, 2 required, and a complex nested `content` object with no output schema. The description addresses only one case (INPUT_FIELD/ACTIVITY_FIELD) and leaves content requirements for other item types unspecified. It also lacks guidance on usage and return values. While sufficient for a narrow use case, it is incomplete for the full range of item types.

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

Parameters4/5

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

The input schema has 100% coverage with descriptions for all properties, so the baseline is 3. However, the description adds critical clarifications for the nested `content` object, specifying valid enum values for `type` ('numeric' | 'text' | 'select') and `aggregate` (MIN|SUM|MAX|AVERAGE) that are not present in the schema. This genuinely goes beyond the schema's generic 'object' description, adding meaningful parameter insight.

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

Purpose5/5

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

The description opens with 'Buat custom item baru' (Create a new custom item), which is a specific verb + resource. The parenthetical '(chart/field/zones)' clarifies the scope of item types. This clearly distinguishes it from sibling tools like update_custom_item, delete_custom_item, and get_custom_items.

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

Usage Guidelines3/5

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

The description implies usage by its verb ('Buat' = create), but it does not explicitly state when to use this tool over alternatives, mention any prerequisites, or provide exclusions. There is no reference to update/delete tools or conditions under which creation might be inappropriate. This is implied usage at best.

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

delete_custom_itemDelete Custom ItemB

Hapus satu custom item berdasarkan ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
apiKeyNoOverride API key untuk request ini saja.
itemIdYesID custom item yang dihapus.
athleteIdNoAthlete ID Intervals.icu. Default dari INTERVALS_ATHLETE_ID.

TDQS

B3/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 does not mention that deletion is permanent, irreversible, or that it requires any specific permissions. For a destructive operation, this is a significant gap.

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

Conciseness3/5

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

The description is a single concise sentence, but it is under-specified rather than appropriately concise. It states the basic action but omits important details that would make it more useful, such as permanence or failure behavior. It is not overly wordy, but it is too brief.

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 the lack of annotations and output schema, the description should do more to explain the tool's behavior. For a delete tool, it should at least note that the deletion is permanent and perhaps mention required authentication. The current description is minimal and leaves the agent without enough context for a destructive operation.

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

Parameters3/5

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

The input schema provides 100% coverage for all three parameters, so the description doesn't need to explain them. The description only mentions 'ID', which aligns with the itemId parameter, but adds no additional meaning beyond what the schema already documents.

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 'Hapus satu custom item berdasarkan ID' clearly states the action (delete) and the resource (custom item) with the key parameter (ID). It distinguishes itself from sibling tools like create_custom_item and update_custom_item by using the verb 'Hapus' (delete), but it doesn't add explicit scope or context beyond the title.

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

Usage Guidelines3/5

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

The description implies usage when you want to delete a custom item, but it provides no explicit guidance on when to use this tool versus alternatives, nor does it mention any prerequisites or exclusions. The context is clear enough for a straightforward delete operation, but there is no extra guidance.

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

delete_eventDelete EventB

Hapus satu event kalender berdasarkan event ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
apiKeyNoOverride API key untuk request ini saja.
eventIdYesEvent ID Intervals.icu.
athleteIdNoAthlete ID Intervals.icu. Default dari INTERVALS_ATHLETE_ID.

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states 'delete' but does not explicitly disclose that the action is permanent, irreversible, or may require specific permissions, adding no context beyond the tool's name.

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

Conciseness5/5

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

The description is one short sentence with no filler, perfectly concise and front-loaded for a simple delete operation.

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

Completeness2/5

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

The description lacks essential context for a destructive operation, such as permanence, authorization requirements, and any prerequisites. The schema covers parameters, but the description fails to provide sufficient operational context for an agent to safely invoke the tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is set to 3. The description highlights the eventId parameter but adds no additional meaning beyond the schema's existing 'Event ID Intervals.icu' description.

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

Purpose5/5

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

The description clearly states the tool deletes one calendar event based on its ID, using a specific verb and resource. It inherently distinguishes from sibling read tools like get_events and get_event_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 guidance is given on when to use this tool versus alternatives. There is no mention of prerequisites, such as first retrieving the event with get_event_by_id, or any caution that deletion is irreversible.

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

get_activitiesGet ActivitiesB

Ambil daftar aktivitas latihan seorang athlete dari Intervals.icu dalam rentang tanggal tertentu.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoJumlah maksimum aktivitas. Default 10.
apiKeyNoOverride API key untuk request ini saja.
endDateNoTanggal akhir, format YYYY-MM-DD. Default hari ini.
athleteIdNoAthlete ID Intervals.icu (contoh: i123456). Default dari INTERVALS_ATHLETE_ID.
startDateNoTanggal mulai, format YYYY-MM-DD. Default 30 hari lalu.

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It states it retrieves a list, which implies a read operation, but does not mention authentication requirements (e.g., apiKey), default date ranges, pagination, or whether the response includes full activity data or just summaries. It adds little beyond what the schema already provides.

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, focused sentence that immediately states the purpose. There is no wasted text, and it is appropriately front-loaded.

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 the absence of an output schema and annotations, the description must provide context about return values and tool behavior. It only says 'list of activities' without indicating the fields, default limits, or whether it returns full details or just identifiers. This could lead to incorrect tool selection, especially with sibling tools like get_activity_details available.

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 parameters are already well documented. The description's mention of 'date range' aligns with startDate and endDate but does not add new meaning to limit, apiKey, or athleteId. It meets the baseline but does not elevate parameter understanding beyond the schema.

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

Purpose5/5

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

The description clearly states the tool's function: 'Ambil daftar aktivitas latihan seorang athlete dari Intervals.icu dalam rentang tanggal tertentu' (Get a list of an athlete's training activities from Intervals.icu within a date range). It specifies the verb (get), the resource (list of activities), and the scope (date range), distinguishing it from sibling tools like get_activity_details or get_activity_streams.

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

Usage Guidelines2/5

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

The description provides no explicit guidance on when to use this tool versus alternatives. It does not mention that get_activity_details is for individual activity details or that filtering is limited to date range. The usage is only implied by the purpose, not stated.

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

get_activity_detailsGet Activity DetailsB

Ambil detail lengkap satu aktivitas berdasarkan activity ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
apiKeyNoOverride API key untuk request ini saja.
activityIdYesActivity ID Intervals.icu.

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are present, so the description carries the full burden of behavioral disclosure. It only says 'get complete details' without mentioning return format, error handling, authorization requirements, or any side effects. The read-only nature is implied by 'get' but not elaborated, and no additional behavioral context is provided.

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

Conciseness5/5

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

The description is a single sentence that directly states the tool's function with no redundant words. It is appropriately concise for a simple getter tool, even if it lacks contextual depth.

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

Completeness3/5

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

The description is minimally viable for a simple read tool, but it lacks important contextual details such as what 'complete details' includes, whether it returns the full activity object, or any limitations. With no output schema, the description should have provided more clarity about the return value. This falls short of a 4 but is not as severe as a 2 given the straightforward nature of the operation.

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

Parameters3/5

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

Schema description coverage is 100%, with both parameters (apiKey and activityId) already explained in the schema. The description adds no parameter information, but the baseline of 3 applies because the schema fully documents the parameters.

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

Purpose4/5

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

The description clearly states the verb (get), resource (activity details), and scope (one activity by ID). It implies a distinction from sibling tools like get_activity_intervals or get_activity_streams by saying 'detail lengkap' (complete details), but it does not explicitly name alternatives or contrast with them.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as get_activities or get_activity_streams. The description only states what the tool does, without any context about appropriate use cases, 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_activity_intervalsGet Activity IntervalsA

Ambil data interval/lap (power, HR, pace per segmen) dari satu aktivitas.

ParametersJSON Schema
NameRequiredDescriptionDefault
apiKeyNoOverride API key untuk request ini saja.
activityIdYesActivity ID Intervals.icu.

TDQS

A3.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 of behavioral disclosure. It mentions the data fields returned but does not state that the operation is read-only, any permission requirements, or potential limitations such as pagination or availability. For a data retrieval tool, this lack of explicit safety or behavioral context is a notable gap.

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

Conciseness5/5

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

The description is a single, concise sentence that is front-loaded with the main action and details. Every word contributes to conveying the tool's core function without 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?

While the description explains what data is retrieved, it lacks an output schema and does not describe the response structure, possible formats, or any additional context like ordering or grouping of intervals. For a simple tool this is adequate, but there are clear gaps in what an agent might need to know.

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 both apiKey and activityId having descriptions. The tool description adds no extra parameter meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's function: retrieving interval/lap data (power, HR, pace per segment) from a single activity. It uses a specific verb ('Ambil' / retrieve) and a specific resource, distinguishing it from sibling tools like get_activity_streams or get_activity_details.

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

Usage Guidelines4/5

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

The description provides clear context by specifying 'dari satu aktivitas' (from one activity), indicating it is for a single activity rather than bulk operations. However, it does not explicitly name alternative tools or provide exclusions, so it stops short of a full 5.

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

get_activity_messagesGet Activity MessagesB

Ambil catatan/komentar (messages) pada satu aktivitas.

ParametersJSON Schema
NameRequiredDescriptionDefault
apiKeyNoOverride API key untuk request ini saja.
activityIdYesActivity ID Intervals.icu.

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations available, the description must carry the burden of behavioral disclosure. It only restates the tool's purpose and does not mention return format, ordering, permissions, pagination, or any side effects. For a read operation, this is minimal but leaves significant 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?

The description is a single, concise sentence that is front-loaded and contains zero wasted words. It efficiently communicates the tool's core function.

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

Completeness3/5

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

The tool is simple (2 parameters, no output schema), but the description omits any detail about what the response looks like (e.g., list of messages, count, or message object structure). Given the simplicity and lack of annotations, this is adequate but not complete.

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

Parameters3/5

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

Schema description coverage is 100%, with both apiKey and activityId already explained in the schema. The description adds no additional meaning or context about parameter usage, so a baseline of 3 is appropriate.

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

Purpose4/5

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

The description 'Ambil catatan/komentar (messages) pada satu aktivitas' clearly states the tool fetches notes/comments for a specific activity, using a specific verb and resource. It is distinct from sibling tools like get_activity_details and add_activity_message, though it does not explicitly name alternatives for 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?

The description provides no guidance on when to use this tool versus alternatives such as add_activity_message or get_activity_details. No context, prerequisites, or exclusions are mentioned beyond the basic purpose.

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

get_activity_streamsGet Activity StreamsA

Ambil data time-series (streams) dari satu aktivitas, misalnya power, heart rate, cadence, altitude, distance, velocity.

ParametersJSON Schema
NameRequiredDescriptionDefault
apiKeyNoOverride API key untuk request ini saja.
activityIdYesActivity ID Intervals.icu.
streamTypesNoComma-separated stream types, contoh: 'time,watts,heartrate,cadence,altitude,distance,velocity_smooth'. Default ke set umum ini.

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits on its own. It only states that the tool retrieves time-series data, which is evident from the verb, but does not address authentication, rate limits, pagination, units, or potential errors. Minimal additional transparency beyond the basic purpose.

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

Conciseness5/5

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

The description is a single, concise sentence that front-loads the main action and resource. Every word carries meaning, with no unnecessary filler. Well-structured for quick comprehension.

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

Completeness3/5

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

The tool has no annotations, no output schema, and moderate complexity. The description provides a clear purpose and examples, but it lacks information about return format, how streamTypes affects output, or differentiation from sibling tools. It is adequate for a simple getter but leaves gaps that would benefit from expansion.

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

Parameters3/5

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

The input schema already covers all parameters with 100% coverage, so a baseline of 3 is appropriate. The description adds marginal value by listing example stream types, but this is not essential since the streamTypes parameter description already provides examples. No significant new meaning is added.

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

Purpose5/5

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

The description clearly states a specific verb ('Ambil' = retrieve) and resource (time-series streams from a single activity). The examples (power, heart rate, cadence, altitude, distance, velocity) further clarify the scope, effectively distinguishing it from siblings like get_activity_details or get_activity_intervals.

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

Usage Guidelines3/5

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

The description implies usage when you need stream data for a specific activity, but it does not explicitly mention when to use this tool over alternatives or provide any exclusion criteria. The guidance is purely implicit from the provided examples and tool name.

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

get_athlete_power_curvesGet Athlete Power CurvesA

Ambil power curve (best power per durasi, dalam watt) seorang athlete untuk musim ini/lalu, dan/atau rentang tanggal custom.

ParametersJSON Schema
NameRequiredDescriptionDefault
apiKeyNoOverride API key untuk request ini saja.
endDateNoTanggal akhir custom range YYYY-MM-DD (harus dipasangkan dengan startDate).
athleteIdNoAthlete ID Intervals.icu. Default dari INTERVALS_ATHLETE_ID.
durationsNoDurasi dalam detik. Default [5,15,30,60,120,300,600,1200,3600].
startDateNoTanggal mulai custom range YYYY-MM-DD (harus dipasangkan dengan endDate).
lastSeasonNoSertakan curve musim lalu. Default true.
thisSeasonNoSertakan curve musim ini. Default true.
activityTypeNoTipe aktivitas, contoh: Ride, Run, VirtualRide. Default 'Ride'.
indoorOutdoorNoFilter lokasi aktivitas.

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the transparency burden. It clarifies that the output is power per duration in watts and mentions the seasonal/custom scope, but it does not disclose response format, defaults (though defaults are in schema), any read-only guarantee, or interaction between season flags and custom dates. It is adequately descriptive but not rich.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that packs the essential purpose and scope options without wasted words. Every clause contributes to understanding what the tool does.

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

Completeness3/5

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

The tool has 9 optional parameters and no output schema, so the description should clarify return values and parameter interactions. It explains the core output concept but does not specify the response structure or how custom dates combine with season flags. This is adequate but leaves some ambiguity.

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

Parameters3/5

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

Schema coverage is 100%, so parameter meanings are fully documented in the schema. The description adds no additional parameter-level detail beyond what the schema already explains. Baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly identifies the tool's function: retrieving power curves (best power per duration) for an athlete, with scope options for current/last season or custom date ranges. It uses a specific verb (Ambil/get) and resource (power curves), which distinguishes it from sibling tools focused on activities or streams.

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 need an athlete's power curve for a season or custom date range. It does not explicitly mention alternatives or exclusions, but the focus is unambiguous. Lacks a 'when not to use' or alternative tool reference.

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

get_custom_item_by_idGet Custom Item By IDA

Ambil detail satu custom item berdasarkan ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
apiKeyNoOverride API key untuk request ini saja.
itemIdYesID custom item.
athleteIdNoAthlete ID Intervals.icu. Default dari INTERVALS_ATHLETE_ID.

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavior. It only states that it retrieves details; it does not mention return format, error handling, permission requirements, or any side effects. For a read operation, this is insufficient beyond the most basic action.

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

Conciseness5/5

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

The description is a single short sentence that conveys the essential purpose without redundancy. It earns its place and is immediately readable.

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

Completeness3/5

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

The tool is a simple getter, and the schema thoroughly documents parameters. However, there is no output schema and the description does not explain what the returned custom item contains or how errors are handled. It is minimally adequate but could be improved with a note on response structure or not-found behavior.

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 itemId described as 'ID custom item', apiKey and athleteId also documented. The description adds no additional parameter context beyond what the schema already provides, matching the baseline for full schema coverage.

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

Purpose5/5

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

The description 'Ambil detail satu custom item berdasarkan ID' clearly states the action (ambil/get), resource (custom item), and scope (satu/one by ID). It distinguishes from the sibling get_custom_items list tool by emphasizing single-item retrieval.

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

Usage Guidelines3/5

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

The phrase 'berdasarkan ID' implies the tool should be used when an item ID is known, but it does not explicitly mention when to prefer this over get_custom_items or exclude other alternatives. Sibling names provide context but no direct guidance.

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

get_custom_itemsGet Custom ItemsA

Ambil daftar custom item (custom chart, field, zones, dll) milik seorang athlete.

ParametersJSON Schema
NameRequiredDescriptionDefault
apiKeyNoOverride API key untuk request ini saja.
athleteIdNoAthlete ID Intervals.icu. Default dari INTERVALS_ATHLETE_ID.

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of disclosing behavioral traits. However, it only states the action 'get list' without explicitly confirming it is a read-only operation, mentioning any side effects, or describing limitations. The word 'get' implies retrieval but does not ensure 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?

The description is a single sentence that is concise and front-loaded with the primary action. It contains no redundant information and effectively communicates the tool's purpose.

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

Completeness3/5

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

Given the tool's simplicity, the description is adequate but could be more complete. It does not explicitly state that this retrieves all custom items for an athlete (not just one), nor does it clarify the output format, which is especially relevant since there is no output schema. The presence of sibling tools also calls for a clearer distinction.

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

Parameters3/5

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

The input schema provides 100% coverage for both parameters (apiKey, athleteId) with clear descriptions, so the schema already handles parameter semantics. The description itself does not add any additional parameter context, but the baseline of 3 applies given the high schema coverage.

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

Purpose5/5

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

The description uses a specific verb 'Ambil daftar' (get list) and clearly identifies the resource as 'custom item' with examples (chart, field, zones). This distinguishes it from siblings like get_custom_item_by_id, which retrieves a single item.

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

Usage Guidelines3/5

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

The description provides context that the tool returns custom items belonging to an athlete, but it does not explicitly state when to use this tool versus alternatives such as get_custom_item_by_id, create_custom_item, or update_custom_item. Usage is implied but not clearly differentiated.

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

get_event_by_idGet Event By IDB

Ambil detail satu event kalender berdasarkan event ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
apiKeyNoOverride API key untuk request ini saja.
eventIdYesEvent ID Intervals.icu.
athleteIdNoAthlete ID Intervals.icu. Default dari INTERVALS_ATHLETE_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 burden. It only states that it retrieves details, without disclosing behaviors such as read-only confirmation, error handling (e.g., 404 if not found), or the shape of the returned object. The description adds nothing beyond the basic function.

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

Conciseness5/5

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

The description is a single, concise sentence with no filler. It front-loads the core function and is easily scannable.

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 or annotations to supplement the description. The description does not specify what 'detail' includes, what the return format is, or any error conditions. While the tool is simple, this leaves gaps for an agent trying to predict the tool's behavior.

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

Parameters3/5

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

The description does not mention any parameters. However, the schema provides descriptions for all three parameters (apiKey, eventId, athleteId) with 100% coverage, so the baseline score of 3 applies.

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

Purpose4/5

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

The description states 'Ambil detail satu event kalender berdasarkan event ID' (Get details of one calendar event by event ID), which specifies the verb, resource, and scope. It clearly distinguishes from get_events by emphasizing 'satu event' (one event), though it does not explicitly reference sibling tools.

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

Usage Guidelines3/5

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

There is no explicit guidance on when to use this tool versus alternatives. The only implied usage is that it requires an event ID, which is evident from the input schema and the phrase 'berdasarkan event ID'.

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

get_eventsGet EventsA

Ambil daftar event kalender (planned workout, race, note) dalam rentang tanggal.

ParametersJSON Schema
NameRequiredDescriptionDefault
apiKeyNoOverride API key untuk request ini saja.
endDateNoTanggal akhir YYYY-MM-DD. Default 30 hari ke depan.
athleteIdNoAthlete ID Intervals.icu. Default dari INTERVALS_ATHLETE_ID.
startDateNoTanggal mulai YYYY-MM-DD. Default hari ini.

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It discloses that the tool returns a list of event types within a date range, but does not state read-only behavior, response structure, pagination, or error conditions. This is basic but not rich.

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

Conciseness5/5

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

The description is a single sentence, front-loaded with the action, and includes the key event types without any redundancy or filler. Every word earns its place.

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

Completeness4/5

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

For a simple list tool with optional parameters and no output schema, the description adequately defines the tool's scope and purpose. It would benefit from explicit mention of read-only behavior, but given the simplicity, it is reasonably complete.

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

Parameters3/5

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

The input schema has 100% coverage with detailed descriptions for all four parameters (apiKey override, endDate default, athleteId default, startDate default). The description only mentions the date range, adding no additional meaning beyond the schema. Baseline of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb 'Ambil daftar' (get list) with a clear resource 'event kalender' (calendar events) and scope 'rentang tanggal' (date range). It enumerates event types (planned workout, race, note), which distinguishes it from siblings like get_event_by_id (singular) and get_activities (activities, not events).

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 states a clear use case (list calendar events within a date range) and implies this is for listing multiple events, contrasting with get_event_by_id for single events. However, it does not explicitly mention when not to use it or name alternative tools, so it falls short of a 5.

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

get_gear_listGet Gear ListB

Ambil katalog gear (sepeda, sepatu, dll) beserta statistik dasarnya untuk seorang athlete.

ParametersJSON Schema
NameRequiredDescriptionDefault
apiKeyNoOverride API key untuk request ini saja.
athleteIdNoAthlete ID Intervals.icu. Default dari INTERVALS_ATHLETE_ID.

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description should disclose behavioral traits. It mentions returning gear with basic statistics, but does not explicitly state read-only nature, error cases, pagination, or permission requirements, leaving the agent with incomplete information.

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

Conciseness5/5

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

The description is a single sentence, front-loaded with the action and resource, and contains no redundant words. It is concise and structurally clear.

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

Completeness3/5

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

Given the tool's low complexity (2 optional parameters, no output schema), the description is adequate but minimal. It covers the core function but omits usage context, return format details, or any potential limitations, making it merely sufficient rather than comprehensive.

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

Parameters3/5

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

The schema already provides full descriptions for both parameters (apiKey, athleteId) with 100% coverage. The tool description adds no additional parameter meaning, so the baseline score of 3 applies.

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

Purpose5/5

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

The description clearly states the tool retrieves a gear catalog with basic statistics for an athlete, using the specific verb 'Ambil' (get) and resource examples like 'sepeda, sepatu' (bikes, shoes). This distinguishes it from sibling tools like get_activities or get_custom_items, which target different data.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives, nor any mention of prerequisites or exclusions. The description only states what the tool does, not when to choose it over siblings.

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

get_wellness_dataGet Wellness DataA

Ambil data wellness harian athlete (training metrics, HRV, resting HR, sleep, subjective scores, dll) dalam rentang tanggal tertentu.

ParametersJSON Schema
NameRequiredDescriptionDefault
apiKeyNoOverride API key untuk request ini saja.
endDateNoTanggal akhir, format YYYY-MM-DD. Default hari ini.
athleteIdNoAthlete ID Intervals.icu. Default dari INTERVALS_ATHLETE_ID.
startDateNoTanggal mulai, format YYYY-MM-DD. Default 30 hari lalu.

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden of behavioral disclosure. It does disclose the kind of data returned (HRV, sleep, etc.) and the date-range scope, but it omits important behavioral traits such as pagination, timezone handling, response structure, or authentication requirements (only the schema hints at apiKey). This is insufficient for a tool with zero annotation support.

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

Conciseness5/5

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

The description is a single, tight sentence in Indonesian, front-loaded with the main purpose ('Ambil data wellness harian athlete') followed by a parenthetical list of data types and the date-range qualifier. Every word earns its place; no fluff or repetition.

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

Completeness3/5

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

Given the tool has no annotations and no output schema, the description does a reasonable job explaining the content and scope. It lists the data categories and date range, which is enough for basic understanding. However, it lacks details on response format, defaults (though the schema provides defaults), or any caveats about data completeness, making it minimally adequate.

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

Parameters3/5

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

The input schema has 100% description coverage, with each parameter (apiKey, endDate, athleteId, startDate) having a meaningful description. The description adds little beyond the schemaโ€”it merely mentions 'dalam rentang tanggal tertentu' which aligns with startDate/endDate. Per the rubric, baseline is 3 because the schema handles the heavy lifting.

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

Purpose5/5

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

The description clearly states the tool's function: 'Ambil data wellness harian athlete' (get daily wellness data for athlete) and enumerates specific data types (training metrics, HRV, resting HR, sleep, subjective scores). This specific verb+resource combination distinguishes it from sibling tools like get_activities or get_activity_details.

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

Usage Guidelines3/5

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

The description implies usage for retrieving wellness data over a date range, and it lists typical wellness metrics. However, it does not explicitly mention when to prefer this over sibling tools or provide exclusions (e.g., 'use get_activities for workout logs'). The context is clear but lacks explicit guidance.

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

update_custom_itemUpdate Custom ItemA

Update custom item yang sudah ada. Hanya field yang diisi yang akan dikirim.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNama baru.
apiKeyNoOverride API key untuk request ini saja.
itemIdYesID custom item yang diupdate.
contentNoKonten baru (object).
itemTypeNoTipe baru.
athleteIdNoAthlete ID Intervals.icu. Default dari INTERVALS_ATHLETE_ID.
visibilityNoVisibilitas baru.
descriptionNoDeskripsi baru.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and discloses the important behavior that only explicitly provided fields are updated, preventing accidental clearing of unspecified fields. It does not cover error cases or response format, but the core partial-update behavior is a valuable disclosure.

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

Conciseness5/5

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

The description is a single sentence, front-loaded with the purpose, and contains no filler. It efficiently communicates both the action and the key updating behavior.

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 an 8-parameter tool with nested objects and no output schema, the description is quite brief. It explains the core update mechanism but omits information about return values, update confirmation, or error handling. The schema covers parameters well, but the description leaves the response behavior unspecified, which is a gap given the tool's complexity.

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

Parameters4/5

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

The input schema covers 100% of parameters with individual descriptions, so the baseline is 3. The description adds cross-parameter semantics by explaining that only filled fields will be sent, which clarifies the effect of omitting any optional parameterโ€”something the schema does not state.

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

Purpose5/5

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

The description clearly specifies the action (update) and the resource (custom item), and explicitly notes the item must already exist. This distinguishes it from sibling tools like create_custom_item and delete_custom_item.

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 implies usage for updating existing custom items and provides the key guidance that only filled fields are sent, which informs the agent which parameters to include. It does not explicitly mention alternatives or exclusions, but the 'sudah ada' (already exists) clarifies that creation is out of scope.

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. 19 tool updatesv0.1.0
    • First observedadd_activity_message
    • First observedadd_or_update_note
    • First observedadd_or_update_planned_workout
    • First observedcreate_custom_item
    • First observeddelete_custom_item
    • First observeddelete_event
    • First observedget_activities
    • First observedget_activity_details
    • First observedget_activity_intervals
    • First observedget_activity_messages
    • First observedget_activity_streams
    • First observedget_athlete_power_curves
    • First observedget_custom_item_by_id
    • First observedget_custom_items
    • First observedget_event_by_id
    • First observedget_events
    • First observedget_gear_list
    • First observedget_wellness_data
    • First observedupdate_custom_item

TDQS

A3.7/5.0

Scored across 19 tools

Disambiguation5/5

Each tool targets a distinct resource and action. Activity-related tools are separated by data granularity (list, details, intervals, streams, messages), and event/custom item tools follow clear CRUD patterns. No two tools appear to serve the same purpose.

Naming Consistency5/5

All tools use a consistent verb_noun pattern in snake_case. Retrieval uses get_, creation uses add_/create_, updates use update_/add_or_update_, and deletion uses delete_. Minor variation like add_or_update_ is predictable.

Tool Count4/5

At 19 tools, this is above the ideal 3-15 range but appropriate for the broad scope covering activities, events, wellness, gear, power curves, and custom items. The tools are grouped by domain and each is justified; still, a few could be consolidated, so not a perfect 5.

Completeness4/5

Core workflows are well covered: activities have read and message addition, events have full CRUD, and custom items have full CRUD. Gaps include no activity update/delete, no gear management, and no wellness update, but these may be outside the API's intended scope or rare needs.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers