Intervals.icu MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| INTERVALS_API_KEY | Yes | Your Intervals.icu API key | |
| INTERVALS_BASE_URL | No | Optional. API root, for pointing the client at a local fake server. Defaults to https://intervals.icu/api/v1. | https://intervals.icu/api/v1 |
| INTERVALS_ATHLETE_ID | Yes | Your athlete ID, e.g. i12345 |
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
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_athleteA | Get the athlete profile: identity, physiology and account info. Returns a compact subset by default - pass fields ["sportSettings"] for per-sport FTP, thresholds and zones (~10 KB), or ["*"] for everything including per-vendor sync configuration. Credential fields are always withheld, and email and date of birth are available only on explicit request. |
| get_athlete_profileB | Get public profile info for the athlete (name, bio, location, etc.). |
| list_activitiesA | List activities for a date range. Returns a compact summary of each activity by default; use |
| get_activityB | Get detailed information about a specific activity by its ID. Returns a compact summary by default; pass |
| search_activitiesC | Search for activities by name or tag. |
| get_activity_intervalsA | Get the lap/interval breakdown for an activity. Each lap carries 84 fields, so a compact subset is returned by default; |
| get_activity_streamsA | Get time-series data streams for an activity (power, HR, cadence, speed, altitude, GPS, etc.). Streams are large, so each channel is downsampled to 500 evenly spaced points by default. Pass types to fetch only the channels you need, and raise max_points only when you genuinely need finer resolution. |
| get_activity_power_curveB | Get the mean maximal power curve for a specific activity. |
| get_activity_best_effortsA | Find best efforts within an activity - e.g. peak 5-min power, fastest 1km. Requires a stream to measure and exactly one of duration or distance. |
| get_activity_weatherC | Get the weather summary for an activity. |
| get_power_curvesA | Get the athlete's best mean maximal power curves across activities of one sport. |
| list_wellnessA | List wellness records for a date range: fitness model (CTL/ATL), HRV, resting HR, sleep, weight, mood and the other subjective scores. |
| get_wellnessB | Get the wellness record for a specific date. |
| update_wellnessA | Update the wellness record for a specific date. Only supply the fields you want to change. |
| list_eventsA | List events on the athlete's training calendar for a date range. Returns a compact summary of each event by default, omitting the structured-workout document; pass |
| get_eventA | Get a specific calendar event by ID. Returns a compact summary by default - pass fields ["*"] (or name workout_doc) to get the structured workout. |
| create_eventB | Create an event on the athlete's training calendar (planned workout, race, note, etc.). |
| list_workoutsB | List all workouts in the athlete's workout library. |
| get_workoutB | Get a specific workout from the library by ID. |
| list_gearA | List all gear (bikes, shoes, etc.) for the athlete. |
| list_routesB | List saved routes for the athlete. |
| get_routeC | Get a specific route by ID. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 22 tools
Most tools target distinct resource/action pairs, especially the many activity-specific getters. The main overlap is between get_athlete and get_athlete_profile, which could be confused despite descriptions clarifying public versus full athlete data.
Tool names consistently use snake_case verb_noun patterns such as get_event, list_activities, create_event, and update_wellness. The use of search_activities instead of list_activities is semantically appropriate rather than a naming inconsistency.
With 22 tools, the surface is slightly heavy but reasonable for a sports-training API covering activities, streams, intervals, wellness, events, workouts, gear, and routes. Most tools correspond to distinct operations, though some activity-detail tools could feel numerous.
The server covers reading and analyzing activities, wellness, events, workouts, gear, and routes, plus a few write operations. However, notable gaps exist: no update/delete for events, and no create/update/delete for workouts, gear, or routes, limiting lifecycle management.