get_activitiesLABSCO SUMMARY
It reads and writes — the calendar tools are what make it more than a dashboard.
Most fitness integrations stop at reading. Here planned events can be created, updated, deleted individually or cleared across a date range, so a conversation about restructuring next month's training block ends with the calendar changed. Raw streams and power curves are on the read side, which is where the analysis questions actually get answered.
What it is
An Intervals.icu bridge for Claude and ChatGPT: activities, events, wellness data, power curves and custom items.
What you get
- get_activities, get_activity_details, get_activity_intervals and get_activity_streams — the list, one activity in detail, its intervals, and raw streams like power and heart rate
- get_athlete_power_curves — best power for the durations and periods you choose
- get_wellness_data — the wellness side of the record
- get_events, get_event_by_id, add_or_update_event, delete_event and delete_events_by_date_range — planned workouts, races and notes, created, changed or cleared
- get_custom_items, get_custom_item_by_id, create_custom_item, update_custom_item and delete_custom_item — charts, custom fields and zones
- An SSE mode that exposes /sse and /messages/ for ChatGPT's custom MCP connectors
Requirements
Python 3.12 or higher and uv. Two values in a .env file: API_KEY from Intervals.icu Settings > API, and ATHLETE_ID, which is the i-prefixed identifier in your Intervals.icu URL. Register with Claude Desktop through mcp install, or write the config by hand — on Windows use the full path to uv.exe and double backslashes. For ChatGPT, start it with MCP_TRANSPORT set to sse and expose the port publicly.
Setup effort
Build from source — git clone https://github.com/mvilanova/intervals-mcp-server.git
USE CASES
Reviewing how a session actually went
Pull the activity's details and intervals, then the raw power and heart-rate streams if the summary is not enough.
Checking whether you are getting stronger
Read best-power curves for the durations you care about across two time periods.
Rescheduling a training block
Clear the events in a date range and add the replacements.
Looking at the week ahead
List upcoming events and open the one you have questions about.
16 tools
Listed in project docs. Your client may show a different list.
get_activity_detailsget_activity_intervalsget_activity_streamsget_athlete_power_curvesget_wellness_dataget_eventsget_event_by_idadd_or_update_eventdelete_eventdelete_events_by_date_rangeget_custom_itemsget_custom_item_by_idcreate_custom_itemupdate_custom_itemdelete_custom_itemBEFORE YOU INSTALL
What to know first
Tools you get
16 tools named in the project's documentation.
Requires
- Python 3.12 or later
- API_KEY in your environment
- ATHLETE_ID in your environment
INSTALLATION
Connect your client
You clone this one yourself.
Server setup
git clone https://github.com/mvilanova/intervals-mcp-server.git
cd intervals-mcp-server
uv venv --python 3.12
source .venv/bin/activate
uv sync
cp .env.example .envThen edit the .env file and set your Intervals.icu athlete id and API key:
API_KEY=<YOUR_API_KEY>
ATHLETE_ID=<YOUR_ATHLETE_ID>Run the following from the intervals-mcp-server directory to configure Claude Desktop:
mcp install src/intervals_mcp_server/server.py --name "Intervals.icu" --with-editable . --env-file .envMCP Clients
Claude Desktop — macOS, Linux
{
"mcpServers": {
"Intervals.icu": {
"command": "/Users/<YOUR_USERNAME>/.local/bin/uv",
"args": [
"run",
"--with",
"mcp[cli]",
"--with-editable",
"<YOUR_PATH_TO_INTERVALS_MCP_SERVER>",
"mcp",
"run",
"<YOUR_PATH_TO_INTERVALS_MCP_SERVER>/src/intervals_mcp_server/server.py"
],
"env": {
"INTERVALS_API_BASE_URL": "https://intervals.icu/api/v1",
"ATHLETE_ID": "<YOUR_ATHLETE_ID>",
"API_KEY": "<YOUR_API_KEY>",
"LOG_LEVEL": "INFO"
}
}
}
}Claude Desktop — Windows
{
"mcpServers": {
"Intervals.icu": {
"command": "C:\\Users\\<YOUR_USERNAME>\\.local\\bin\\uv.exe",
"args": [
"run",
"--with",
"mcp[cli]",
"--with-editable",
"<YOUR_PATH_TO_INTERVALS_MCP_SERVER>",
"mcp",
"run",
"<YOUR_PATH_TO_INTERVALS_MCP_SERVER>\\src\\intervals_mcp_server\\server.py"
],
"env": {
"INTERVALS_API_BASE_URL": "https://intervals.icu/api/v1",
"ATHLETE_ID": "<YOUR_ATHLETE_ID>",
"API_KEY": "<YOUR_API_KEY>",
"LOG_LEVEL": "INFO"
}
}
}
}ChatGPT — SSE server
export FASTMCP_HOST=127.0.0.1 FASTMCP_PORT=8765 MCP_TRANSPORT=sse FASTMCP_LOG_LEVEL=INFO
python src/intervals_mcp_server/server.py