Skip to main content
Glama
jakub-m-arch

Intervals.icu MCP Server

by jakub-m-arch

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
INTERVALS_ICU_API_KEYYesIntervals.icu API key from Settings → Developer Settings
INTERVALS_ICU_TOOLSETSNoComma-separated toolsets, 'default' or 'all'default
INTERVALS_ICU_ATHLETE_IDNoAthlete ID; 0 means the owner of the API key0
INTERVALS_ICU_WRITE_MODENo'read-only', 'safe' (create/update) or 'full' (also delete)safe

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}
prompts
{
  "listChanged": true
}
resources
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_athlete_profileA

Get the athlete profile: time zone, units, weight, resting HR and per-sport settings (threshold HR/pace/power and training zones). Use it to interpret zones and paces or before planning workouts.

get_fitness_summaryA

Get training fitness (CTL, 42-day load), fatigue (ATL, 7-day load) and form (TSB = fitness − fatigue) with the Intervals.icu form zone, a daily series, and weekly totals by sport. Defaults to the last 6 weeks. Use it for questions about training load, freshness or trends.

list_activitiesA

List completed activities (runs, rides, etc.) in a date range, newest first, with distance, time, pace/GAP, heart rate and training load, plus totals per activity type. Defaults to the last 30 days. Use get_activity for details of one activity.

search_activitiesA

Search all activities by name (case-insensitive substring) or by tag (start the query with #, e.g. "#race"). Use it to find specific sessions regardless of date.

get_activityA

Get details of one activity: summary metrics, description, time in heart-rate and pace zones, aerobic decoupling, HR recovery, fitness/fatigue after the session and, optionally, the list of intervals/laps with pace and HR. Activity ids look like "i123456789" (see list_activities).

list_activity_commentsA

List comments and notes (e.g. from a coach or the athlete) on one activity.

update_activityA

Edit a completed activity: name, description/notes, sport type, perceived exertion (RPE), feel, tags, or race/commute flags. Only the fields you pass are changed.

create_manual_activityA

Log an activity that was not recorded by a device (e.g. a treadmill run without a watch). Today or past dates only. It counts towards training load; confirm details with the user first.

get_activity_streamsA

Get second-by-second data of one activity (heart rate, pace/speed, cadence, altitude, distance, power), downsampled to a compact table: each row averages a time window. Use it to analyse pacing, HR drift or how effort changed during the session. GPS coordinates are only included when "latlng" is requested explicitly.

get_activity_histogramA

Get how much time was spent at each heart rate, pace or power level in one activity (a histogram with ranges, time and % of total). Finer-grained than time in zones.

get_activity_best_effortsA

Find the best efforts inside one activity: fastest pace over a distance (e.g. best 1 km), highest average heart rate or power over a duration (e.g. best 5 min). Returns when each effort happened. For all-time or period bests across activities use get_athlete_curves.

get_activity_segment_statsA

Get pace, heart rate, cadence and intensity for a chosen part of an activity, e.g. "from 10:00 to 20:00". Use it to compare the first and second half or a climb.

search_intervalsA

Find past activities containing intervals of a given duration and intensity, e.g. "4–6 minute reps at 95–105% of threshold". Intensity is % of threshold (FTP, threshold pace or LTHR depending on the metric).

get_athlete_curvesA

Get personal bests for a sport over one or more periods: best times and paces at standard distances (pace), or highest average heart rate / power for standard durations. Pace curves include critical speed, a good estimate of threshold pace. Use it for PRs, race predictions and fitness progress (compare periods such as 42d vs 1y).

get_wellnessA

Get daily wellness data: resting HR, HRV, sleep (duration, score), weight, steps, readiness and subjective ratings (soreness, fatigue, stress, mood, motivation on the Intervals.icu 1–4 scales), plus period averages. Defaults to the last 14 days. Use it for recovery and readiness questions.

update_wellnessA

Log or correct wellness data for one day: weight, resting HR, HRV, sleep, subjective ratings and comments. Only the fields you pass are changed. Measurements (weight, HR, HRV, sleep) cannot be removed once set, only overwritten; ratings are cleared with 0 and comments with "".

list_eventsA

List calendar entries: planned workouts (with the workout steps as text), races, notes, holidays, sickness and injuries. Defaults to today and the next 2 weeks. Use it to see what is planned or to compare the plan with completed activities.

get_eventA

Get one calendar event (planned workout, race or note) by id, including the full workout description.

create_eventsA

Add planned workouts, races, notes or holidays/sickness to the athlete calendar (up to 50 per call). Planned workouts sync to the athlete's watch when their device integration is enabled. Show the plan to the user and get agreement before calling. An entry with the same date, category and name as an existing one is skipped unless allow_duplicates is true. Check workout_check in the result and fix any warnings with update_event.

Workout text syntax (Intervals.icu): one step per line starting with "- ", e.g. "- 10m Z2 Pace", "- 1.5km 7:00/km Pace", "- 90s 85% Pace", "- 10m Ramp 60-80% HR", "- 5m Z2 HR". Durations: 30s, 90s, 1m30, 10m, 1h. Distances: 400mtr (meters!), 1.5km, 2mi — "400m" means 400 MINUTES. Repeats: a line ending in "Nx" (e.g. "Main set 4x") followed by its steps, then a blank line. Section lines like "Warmup"/"Cooldown" are labels. Text before the duration labels a step ("- Strides 20s Z5 Pace"). Power (rides): "75%" (of FTP), "200w", "150-180w", "Z2". Bpm ranges like "140-150bpm" are NOT supported; use HR zones or % HR.

update_eventA

Change a calendar event: move it to another date, rename it, or rewrite the workout steps. Only the fields you pass are changed. Confirm the change with the user first.

Workout text syntax (Intervals.icu): one step per line starting with "- ", e.g. "- 10m Z2 Pace", "- 1.5km 7:00/km Pace", "- 90s 85% Pace", "- 10m Ramp 60-80% HR", "- 5m Z2 HR". Durations: 30s, 90s, 1m30, 10m, 1h. Distances: 400mtr (meters!), 1.5km, 2mi — "400m" means 400 MINUTES. Repeats: a line ending in "Nx" (e.g. "Main set 4x") followed by its steps, then a blank line. Section lines like "Warmup"/"Cooldown" are labels. Text before the duration labels a step ("- Strides 20s Z5 Pace"). Power (rides): "75%" (of FTP), "200w", "150-180w", "Z2". Bpm ranges like "140-150bpm" are NOT supported; use HR zones or % HR.

mark_event_doneA

Mark a planned workout as completed without a recorded file: creates a manual activity matching the plan (for sessions done without a watch). Only for today or past dates.

duplicate_eventsA

Copy calendar events to later weeks, e.g. repeat this week's workouts for the next 3 weeks. Confirm with the user first.

apply_planA

Copy all workouts of a training plan from the library (a PLAN folder, see list_workout_library) onto the calendar, starting on a date. Each workout lands on start date + its plan day. Adds many events: confirm the plan and start date first.

list_workout_libraryA

List the athlete's workout library: folders and training plans with their workouts (name, sport, duration, load). Use get_workout for the steps of a workout.

get_workoutA

Get one workout from the library, including its steps in Intervals.icu text format.

get_training_planA

Get the training plan the athlete is currently following (if any): plan name, start date and its workouts by day.

create_folderA

Create a folder (or a training plan) in the workout library to hold reusable workouts.

update_folderC

Rename a workout library folder or plan, or change its description.

create_workoutsA

Save reusable workouts in a library folder or plan (up to 50 per call). Check workout_check in the result and fix warnings with update_workout.

Workout text syntax (Intervals.icu): one step per line starting with "- ", e.g. "- 10m Z2 Pace", "- 1.5km 7:00/km Pace", "- 90s 85% Pace", "- 10m Ramp 60-80% HR", "- 5m Z2 HR". Durations: 30s, 90s, 1m30, 10m, 1h. Distances: 400mtr (meters!), 1.5km, 2mi — "400m" means 400 MINUTES. Repeats: a line ending in "Nx" (e.g. "Main set 4x") followed by its steps, then a blank line. Section lines like "Warmup"/"Cooldown" are labels. Text before the duration labels a step ("- Strides 20s Z5 Pace"). Power (rides): "75%" (of FTP), "200w", "150-180w", "Z2". Bpm ranges like "140-150bpm" are NOT supported; use HR zones or % HR.

update_workoutA

Change a library workout (name, steps, sport, folder). Only the fields you pass are changed.

Workout text syntax (Intervals.icu): one step per line starting with "- ", e.g. "- 10m Z2 Pace", "- 1.5km 7:00/km Pace", "- 90s 85% Pace", "- 10m Ramp 60-80% HR", "- 5m Z2 HR". Durations: 30s, 90s, 1m30, 10m, 1h. Distances: 400mtr (meters!), 1.5km, 2mi — "400m" means 400 MINUTES. Repeats: a line ending in "Nx" (e.g. "Main set 4x") followed by its steps, then a blank line. Section lines like "Warmup"/"Cooldown" are labels. Text before the duration labels a step ("- Strides 20s Z5 Pace"). Power (rides): "75%" (of FTP), "200w", "150-180w", "Z2". Bpm ranges like "140-150bpm" are NOT supported; use HR zones or % HR.

duplicate_workoutsA

Copy workouts inside a training plan to later weeks of the plan, e.g. repeat week 1 for weeks 2–4.

list_gearA

List gear such as running shoes and bikes with accumulated distance, time and number of activities, plus maintenance/replacement reminders (e.g. shoes at 600 km).

create_gearB

Add gear such as a new pair of running shoes, optionally with distance already covered. Activities are linked to gear by the device sync or manually in Intervals.icu.

update_gearA

Rename gear, change its notes, or retire it (e.g. worn-out shoes; then add the new pair with create_gear). Only the fields you pass are changed.

add_gear_reminderA

Add a replacement or maintenance reminder to gear, e.g. "replace shoes after 600 km". Set at least one limit.

update_gear_reminderA

Reset a gear reminder after doing the maintenance (starts counting again), snooze it, or change its limits.

Prompts

Interactive templates invoked by user choice

NameDescription
weekly-reviewReview a week of training: volume, intensity, fitness trend and recovery.
analyze-activityDeep-dive into one activity (defaults to the most recent run).
recovery-checkShould I train hard, easy or rest today?
plan-next-weekDraft next week of training based on recent load and a goal.
race-prepAssess readiness for a race and suggest pacing and final preparation.

Resources

Contextual data attached and managed by the client

NameDescription
athlete-profileAthlete settings: units, time zone, thresholds and training zones per sport.
workout-syntaxHow to write structured workouts in Intervals.icu text format.

TDQS

A3.7/5.0

Scored across 36 tools

Disambiguation5/5

Each tool targets a distinct resource and action: list/search/get/update on activities, calendar events, and library workouts are clearly separated, and the analytics tools (streams, histogram, best efforts, segment stats) each have unique outputs. Even near-pairs like create_events vs create_workouts and create_manual_activity vs mark_event_done are disambiguated by their descriptions.

Naming Consistency5/5

Tool names follow a consistent snake_case verb_noun pattern (list_*, get_*, create_*, update_*, duplicate_*), with only minor multi-word variants like mark_event_done and add_gear_reminder that remain predictable. The naming convention makes it easy to anticipate what each tool does.

Tool Count2/5

36 tools is beyond the 25+ threshold for 'too many' in the calibration, making this a heavy tool set even though the server covers a broad training platform. Many tools are narrow and could be consolidated (e.g. activity analytics) or omitted for a more focused MCP surface.

Completeness3/5

The set covers most core workflows across athlete profile, activities, calendar planning, workout library, wellness, and gear, with read/create/update operations for most resources. However, there are no delete tools for activities, events, workouts, or folders, leaving lifecycle dead ends and making the CRUD coverage incomplete.

Maintenance

ActivityMaintained
ResponsivenessNo issues