Skip to main content
Glama
oscarantxo-web

Intervals.icu MCP Server

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
API_KEYYesYour Intervals.icu API key
LOG_LEVELNoLogging levelINFO
ATHLETE_IDYesYour Intervals.icu athlete ID (usually starts with 'i', e.g., i12345)
FASTMCP_HOSTNoHost for SSE transport127.0.0.1
FASTMCP_PORTNoPort for SSE transport8765
MCP_TRANSPORTNoTransport type for MCP server (e.g., stdio or sse)
FASTMCP_LOG_LEVELNoLog level for FastMCPINFO
INTERVALS_API_BASE_URLNoBase URL for the Intervals.icu APIhttps://intervals.icu/api/v1

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": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_gear_listA

Get the gear catalog (bikes, shoes, etc.) for an athlete from Intervals.icu.

Returns one line per gear item with id, type, name, and basic stats. The result is cached for the MCP process lifetime; pass refresh=True to re-fetch.

Args: athlete_id: The Intervals.icu athlete ID (optional, will use ATHLETE_ID from .env if not provided) api_key: The Intervals.icu API key (optional, will use API_KEY from .env if not provided) refresh: If True, bypass the cache and re-fetch from the API (default False)

get_activitiesA

Get a list of activities for an athlete from Intervals.icu

Args: athlete_id: The Intervals.icu athlete ID (optional, will use ATHLETE_ID from .env if not provided) api_key: The Intervals.icu API key (optional, will use API_KEY from .env if not provided) start_date: Start date in YYYY-MM-DD format (optional, defaults to 30 days ago) end_date: End date in YYYY-MM-DD format (optional, defaults to today) limit: Maximum number of activities to return (optional, defaults to 10) include_unnamed: Whether to include unnamed activities (optional, defaults to False)

get_activity_detailsA

Get detailed information for a specific activity from Intervals.icu

Args: activity_id: The Intervals.icu activity ID api_key: The Intervals.icu API key (optional, will use API_KEY from .env if not provided)

get_activity_intervalsA

Get interval data for a specific activity from Intervals.icu

This endpoint returns detailed metrics for each interval in an activity, including power, heart rate, cadence, speed, and environmental data. It also includes grouped intervals if applicable.

Args: activity_id: The Intervals.icu activity ID api_key: The Intervals.icu API key (optional, will use API_KEY from .env if not provided)

get_activity_streamsA

Get stream data for a specific activity from Intervals.icu

This endpoint returns time-series data for an activity, including metrics like power, heart rate, cadence, altitude, distance, temperature, and velocity data.

Args: activity_id: The Intervals.icu activity ID api_key: The Intervals.icu API key (optional, will use API_KEY from .env if not provided) stream_types: Comma-separated list of stream types to retrieve (optional, defaults to all available types) Available types: time, watts, heartrate, cadence, altitude, distance, core_temperature, skin_temperature, velocity_smooth

get_activity_messagesA

Get messages (notes/comments) for a specific activity from Intervals.icu

Args: activity_id: The Intervals.icu activity ID api_key: The Intervals.icu API key (optional, will use API_KEY from .env if not provided)

add_activity_messageB

Add a message (note/comment) to an activity on Intervals.icu

Args: activity_id: The Intervals.icu activity ID content: The message text to add api_key: The Intervals.icu API key (optional, will use API_KEY from .env if not provided)

get_eventsA

Get events for an athlete from Intervals.icu

Args: athlete_id: The Intervals.icu athlete ID (optional, will use ATHLETE_ID from .env if not provided) api_key: The Intervals.icu API key (optional, will use API_KEY from .env if not provided) start_date: Start date in YYYY-MM-DD format (optional, defaults to today) end_date: End date in YYYY-MM-DD format (optional, defaults to 30 days from today)

get_event_by_idB

Get detailed information for a specific event from Intervals.icu

Args: event_id: The Intervals.icu event ID athlete_id: The Intervals.icu athlete ID (optional, will use ATHLETE_ID from .env if not provided) api_key: The Intervals.icu API key (optional, will use API_KEY from .env if not provided)

delete_eventB

Delete event for an athlete from Intervals.icu Args: athlete_id: The Intervals.icu athlete ID (optional, will use ATHLETE_ID from .env if not provided) api_key: The Intervals.icu API key (optional, will use API_KEY from .env if not provided) event_id: The Intervals.icu event ID

delete_events_by_date_rangeA

Delete events for an athlete from Intervals.icu in the specified date range.

Args: athlete_id: The Intervals.icu athlete ID (optional, will use ATHLETE_ID from .env if not provided) api_key: The Intervals.icu API key (optional, will use API_KEY from .env if not provided) start_date: Start date in YYYY-MM-DD format end_date: End date in YYYY-MM-DD format

add_or_update_eventA

Post event for an athlete to Intervals.icu this follows the event api from intervals.icu If event_id is provided, the event will be updated instead of created.

Many arguments are required as this MCP tool function maps directly to the Intervals.icu API parameters.

Args: athlete_id: The Intervals.icu athlete ID (optional, will use ATHLETE_ID from .env if not provided) api_key: The Intervals.icu API key (optional, will use API_KEY from .env if not provided) event_id: The Intervals.icu event ID (optional, will use event_id from .env if not provided) start_date: Start date in YYYY-MM-DD format (optional, defaults to today) name: Name of the activity workout_doc: steps as a list of Step objects (optional, but necessary to define workout steps) workout_type: Workout type (e.g. Ride, Run, Swim, Walk, Row) moving_time: Total expected moving time of the workout in seconds (optional) distance: Total expected distance of the workout in meters (optional)

Example: "workout_doc": { "description": "High-intensity workout for increasing VO2 max", "steps": [ {"power": {"value": 80, "units": "%ftp"}, "duration": 900, "warmup": true}, {"reps": 2, "text": "High-intensity intervals", "steps": [ {"power": {"value": 110, "units": "%ftp"}, "distance": 500, "text": "High-intensity"}, {"power": {"value": 80, "units": "%ftp"}, "duration": 90, "text": "Recovery"} ]}, {"power": {"value": 80, "units": "%ftp"}, "duration": 600, "cooldown": true}, {"text": ""} ] }

Step properties: distance: Distance of step in meters {"distance": 5000} duration: Duration of step in seconds {"duration": 1800} power/hr/pace/cadence: Define step intensity Percentage of FTP: {"power": {"value": 80, "units": "%ftp"}} Absolute power: {"power": {"value": 200, "units": "w"}} Heart rate: {"hr": {"value": 75, "units": "%hr"}} Heart rate (LTHR): {"hr": {"value": 85, "units": "%lthr"}} Cadence: {"cadence": {"value": 90, "units": "cadence"}} Pace by ftp: {"pace": {"value": 80, "units": "%pace"}} Pace by zone: {"pace": {"value": 2, "units": "pace_zone"}} Zone by power: {"power": {"value": 2, "units": "power_zone"}} Zone by heart rate: {"hr": {"value": 2, "units": "hr_zone"}} Ranges: Specify ranges for power, heart rate, or cadence: {"power": {"start": 80, "end": 90, "units": "%ftp"}} Ramps: Instead of a range, indicate a gradual change in intensity (useful for ERG workouts): {"ramp": true, "power": {"start": 80, "end": 90, "units": "%ftp"}} Repeats: include the reps property and add nested steps {"reps": 3, "steps": [ {"power": {"value": 110, "units": "%ftp"}, "distance": 500, "text": "High-intensity"}, {"power": {"value": 80, "units": "%ftp"}, "duration": 90, "text": "Recovery"} ]} Free Ride: Include freeride to indicate a segment without ERG control, optionally with a suggested power range: {"freeride": true, "power": {"value": 80, "units": "%ftp"}} Comments and Labels: Add descriptive text to label steps: {"text": "Warmup"}

How to use steps:

  • Set distance or duration as appropriate for step

  • Use "reps" with nested steps to define repeat intervals (as in example above)

  • Define one of "power", "hr" or "pace" to define step intensity

add_or_update_noteA

Add or update a plain text note (category NOTE) on the Intervals.icu calendar.

Args: name: Title of the note description: Plain text content of the note start_date: Date in YYYY-MM-DD format (optional, defaults to today) color: Color of the note (e.g. green, orange, red, blue) athlete_id: The Intervals.icu athlete ID (optional) api_key: The Intervals.icu API key (optional) event_id: The Intervals.icu event ID (optional, for updates)

get_custom_itemsA

Get custom items (charts, custom fields, zones, etc.) for an athlete from Intervals.icu

Args: athlete_id: The Intervals.icu athlete ID (optional, will use ATHLETE_ID from .env if not provided) api_key: The Intervals.icu API key (optional, will use API_KEY from .env if not provided)

get_custom_item_by_idA

Get detailed information for a specific custom item from Intervals.icu

Args: item_id: The custom item ID athlete_id: The Intervals.icu athlete ID (optional, will use ATHLETE_ID from .env if not provided) api_key: The Intervals.icu API key (optional, will use API_KEY from .env if not provided)

create_custom_itemB

Create a new custom item for an athlete on Intervals.icu

Args: name: Name of the custom item item_type: Type of custom item (e.g. FITNESS_CHART, TRACE_CHART, INPUT_FIELD, ACTIVITY_FIELD, INTERVAL_FIELD, ACTIVITY_STREAM, ACTIVITY_CHART, ACTIVITY_HISTOGRAM, ACTIVITY_HEATMAP, ACTIVITY_MAP, ACTIVITY_PANEL, ZONES) athlete_id: The Intervals.icu athlete ID (optional, will use ATHLETE_ID from .env if not provided) api_key: The Intervals.icu API key (optional, will use API_KEY from .env if not provided) description: Description of the custom item (optional) content: Configuration content for the custom item as a dict (optional). Important enum values: - "type" field for INPUT_FIELD/ACTIVITY_FIELD: must be "numeric", "text", or "select" (NOT "number") - "aggregate" field: must be "MIN", "SUM", "MAX", or "AVERAGE" (NOT "AVG") visibility: Visibility setting: PRIVATE, FOLLOWERS, or PUBLIC (optional)

update_custom_itemA

Update an existing custom item for an athlete on Intervals.icu

Args: item_id: The custom item ID to update athlete_id: The Intervals.icu athlete ID (optional, will use ATHLETE_ID from .env if not provided) api_key: The Intervals.icu API key (optional, will use API_KEY from .env if not provided) name: New name for the custom item (optional) item_type: New type for the custom item (optional) description: New description for the custom item (optional) content: New configuration content for the custom item as a dict (optional). Important enum values: - "type" field for INPUT_FIELD/ACTIVITY_FIELD: must be "numeric", "text", or "select" (NOT "number") - "aggregate" field: must be "MIN", "SUM", "MAX", or "AVERAGE" (NOT "AVG") visibility: New visibility setting: PRIVATE, FOLLOWERS, or PUBLIC (optional)

delete_custom_itemA

Delete a custom item for an athlete from Intervals.icu

Args: item_id: The custom item ID to delete athlete_id: The Intervals.icu athlete ID (optional, will use ATHLETE_ID from .env if not provided) api_key: The Intervals.icu API key (optional, will use API_KEY from .env if not provided)

get_athlete_power_curvesA

Get power curves for an athlete from Intervals.icu.

Returns best power output for selected durations across specified time periods. Uses FFT power computation. Power values are in watts.

Args: activity_type: Activity type (e.g. "Ride", "Run", "VirtualRide"). Default is "Ride". durations: Durations in seconds to include. Default is [5, 15, 30, 60, 120, 300, 600, 1200, 3600] indoor_outdoor: Filter by location — "indoor" or "outdoor". Omit for no filtering. start_date: Start date (YYYY-MM-DD) for custom date range curve. Must be used with end_date. end_date: End date (YYYY-MM-DD) for custom date range curve. Must be used with start_date. this_season: Include this season's curve (default True) last_season: Include last season's curve (default True) include_normalised: Include weight-normalised W/kg values (default True) athlete_id: Intervals.icu athlete ID (optional, uses ATHLETE_ID from .env if not provided) api_key: Optional API key override. Uses API_KEY from .env if not provided.

get_wellness_dataA

Get wellness data for an athlete from Intervals.icu.

By default returns standard wellness fields (training metrics, vitals, sleep, subjective scores, etc.). Set include_all_fields=True to also include any additional or custom fields configured by the user in Intervals.icu.

Args: athlete_id: The Intervals.icu athlete ID (optional, will use ATHLETE_ID from .env if not provided) api_key: The Intervals.icu API key (optional, will use API_KEY from .env if not provided) start_date: Start date in YYYY-MM-DD format (optional, defaults to 30 days ago) end_date: End date in YYYY-MM-DD format (optional, defaults to today) include_all_fields: If True, include additional and custom fields beyond the standard set (optional, defaults to False)

icu_get_athlete_profileA

Get athlete profile, FTP settings, LTHR, weight, and power/HR zones from Intervals.icu

Args: athlete_id: The Intervals.icu athlete ID (optional, will use ATHLETE_ID from env) api_key: The Intervals.icu API key (optional, will use API_KEY from env)

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.8/5.0

Scored across 21 tools

Disambiguation5/5

Each tool maps to a distinct resource and action: activities, events, notes, custom items, wellness, gear, and profile are clearly separated. Within the activity group, list/detail/interval/stream/message endpoints are well differentiated by their descriptions.

Naming Consistency4/5

Most tools follow a predictable verb_noun pattern like get_activities, create_custom_item, delete_event, and add_activity_message. Minor inconsistencies exist: icu_get_athlete_profile uses an unusual prefix, and add_or_update is used for events/notes while create/update is used for custom items.

Tool Count4/5

21 tools is above the typical 3-15 sweet spot, but the count maps naturally to multiple distinct Intervals.icu domains: activities, events/calendar, custom items, wellness, gear, and athlete profile. It feels slightly heavy rather than bloated or redundant.

Completeness4/5

The set covers the main workflows well: reading activity data, managing events and notes, full CRUD for custom items, and pulling wellness, gear, and profile information. Minor gaps exist—no activity write/delete operations, no note deletion, and no wellness or gear updates—but these are workable for a mostly read-oriented integration.

Maintenance

ActivityMaintained
ResponsivenessNo issues