A community-driven registry for Claude, Cursor, Windsurf, Cline & more. Not affiliated with Anthropic.
Are you the author? Sign in to claim
Model Context Protocol (MCP) server for connecting Claude and ChatGPT with the Intervals.icu API.
Model Context Protocol (MCP) server for connecting Claude and ChatGPT with the Intervals.icu API. It provides tools for authentication and data retrieval for activities, events, wellness data, power curves, and custom items.
If you find the Model Context Protocol (MCP) server useful, please consider supporting its continued development with a donation.
macOS/Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
Windows (PowerShell):
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
After installation, find the full path to uv — you'll need it later when configuring Claude Desktop:
where.exe uv
# Example output: C:\Users\<USERNAME>\.local\bin\uv.exe
git clone https://github.com/mvilanova/intervals-mcp-server.git
cd intervals-mcp-server
# Create virtual environment with Python 3.12
uv venv --python 3.12
# Activate virtual environment
# On macOS/Linux:
source .venv/bin/activate
# On Windows:
.venv\Scripts\activate
uv sync
Make a copy of .env.example and name it .env by running the following command:
macOS/Linux:
cp .env.example .env
Windows (PowerShell):
Copy-Item .env.example .env
Then edit the .env file and set your Intervals.icu athlete id and API key:
API_KEY=your_intervals_api_key_here
ATHLETE_ID=your_athlete_id_here
Your athlete ID is typically visible in the URL when you're logged into Intervals.icu. It looks like:
https://intervals.icu/athlete/i12345/... where i12345 is your athlete IDThis project is actively developed, with new features and fixes added regularly. To stay up to date, follow these steps:
main⚠️ Make sure you don't have uncommitted changes before running this command.
macOS/Linux:
git checkout main && git pull
Windows (PowerShell):
git checkout main; git pull
Activate your virtual environment and sync dependencies:
macOS/Linux:
source .venv/bin/activate
uv sync
Windows (PowerShell):
.venv\Scripts\activate
uv sync
If Claude Desktop fails due to configuration changes, follow these steps:
Intervals.icu entry in claude_desktop_config.json.intervals-mcp-server directory.macOS/Linux:
mcp install src/intervals_mcp_server/server.py --name "Intervals.icu" --with-editable . --env-file .env
Windows: Re-add the entry manually as described in the Windows configuration section.
spawn uv ENOENT — Claude Desktop cannot find the uv executable. Use the full path to uv in the command field. Run which uv (macOS/Linux) or where.exe uv (Windows) to get it.
spawn /Users/... ENOENT on Windows — The config file contains a macOS/Linux-style path. Replace it with the correct Windows path using backslashes as described in the Windows configuration section below.
Windows Store install: config changes not taking effect — You may be editing the wrong config file. Claude Desktop installed from the Microsoft Store reads from AppData\Local\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\claude_desktop_config.json, not AppData\Roaming\Claude\.
To use this server with Claude Desktop, you need to add it to your Claude Desktop configuration.
intervals-mcp-server directory to configure Claude Desktop:mcp install src/intervals_mcp_server/server.py --name "Intervals.icu" --with-editable . --env-file .env
claude_desktop_config.json, it should look like this:{
"mcpServers": {
"Intervals.icu": {
"command": "/Users/<USERNAME>/.local/bin/uv",
"args": [
"run",
"--with",
"mcp[cli]",
"--with-editable",
"/path/to/intervals-mcp-server",
"mcp",
"run",
"/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"
}
}
}
}
Where /path/to/ is the path to the intervals-mcp-server code folder in your system.
The mcp install command may fail on Windows due to environment or permission issues. Instead, configure Claude Desktop manually:
Find the Claude Desktop config file. If Claude Desktop was installed from the Microsoft Store, the config is located at:
C:\Users\<USERNAME>\AppData\Local\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\claude_desktop_config.json
If installed via the standard installer, it may be at:
C:\Users\<USERNAME>\AppData\Roaming\Claude\claude_desktop_config.json
If the file or folder does not exist, create it.
Add the following entry to claude_desktop_config.json, replacing the placeholders with your actual values:
{
"mcpServers": {
"Intervals.icu": {
"command": "C:\\Users\\<USERNAME>\\.local\\bin\\uv.exe",
"args": [
"run",
"--with",
"mcp[cli]",
"--with-editable",
"C:\\path\\to\\intervals-mcp-server",
"mcp",
"run",
"C:\\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"
}
}
}
}
\\) for all Windows paths in JSON.uv.exe, run where.exe uv in PowerShell.pwd from inside the intervals-mcp-server folder.Note for Windows Store installs: Claude Desktop installed from the Microsoft Store sandboxes its config under
AppData\Local\Packages\.... EditingAppData\Roaming\Claude\claude_desktop_config.jsonwill have no effect — make sure you edit the correct file.
Once the server is running and Claude Desktop is configured, you can use the following tools to ask questions about your past and future activities, events, and wellness data.
get_activities: Retrieve a list of activitiesget_activity_details: Get detailed information for a specific activityget_activity_intervals: Get detailed interval data for a specific activityget_activity_streams: Get raw data streams (power, heart rate, etc.) for a specific activityget_athlete_power_curves: Get best power output curves for selected durations and time periodsget_wellness_data: Fetch wellness dataget_events: Retrieve upcoming events (workouts, races, etc.)get_event_by_id: Get detailed information for a specific eventadd_or_update_event: Create or update an event (workout, race, note, etc.)delete_event: Delete a specific eventdelete_events_by_date_range: Delete events within a date rangeget_custom_items: Get custom items (charts, custom fields, zones, etc.) for an athleteget_custom_item_by_id: Get detailed information for a specific custom itemcreate_custom_item: Create a new custom item for an athleteupdate_custom_item: Update an existing custom itemdelete_custom_item: Delete a custom itemChatGPT’s beta MCP connectors can also talk to this server over the SSE transport.
Start the server in SSE mode so it exposes the /sse and /messages/ endpoints:
export FASTMCP_HOST=127.0.0.1 FASTMCP_PORT=8765 MCP_TRANSPORT=sse FASTMCP_LOG_LEVEL=INFO
python src/intervals_mcp_server/server.py
The startup log prints the full URLs (for example http://127.0.0.1:8765/sse). ChatGPT needs that public URL, so forward the port with a tool such as ngrok http 8765 if you are not exposing the server directly.
In ChatGPT, open Settings → Features → Custom MCP Connectors and click Add. Fill in:
Intervals.icuhttps://<your-public-host>/sseYou can reuse the same ngrok http 8765 tunnel URL here; just ensure it forwards to the host/port you exported above.
Save the connector and open a new chat. ChatGPT will keep the SSE connection open and POST follow-up requests to the /messages/ endpoint announced by the server. If you restart the MCP server or tunnel, rerun the SSE command and update the connector URL if it changes.
Install development dependencies and run the test suite with:
uv sync --all-extras
pytest -v tests
To start the server manually (useful when developing or testing), run:
mcp run src/intervals_mcp_server/server.py
To capture server logs for debugging, wrap the command in a shell and redirect stderr to a file.
macOS/Linux — modify your claude_desktop_config.json like this:
{
"mcpServers": {
"Intervals.icu": {
"command": "/bin/bash",
"args": [
"-c",
"/Users/<USERNAME>/.local/bin/uv run --with 'mcp[cli]' --with-editable /path/to/intervals-mcp-server mcp run /path/to/intervals-mcp-server/src/intervals_mcp_server/server.py 2>> /path/to/intervals-mcp-server/mcp-server.log"
],
"env": {
"INTERVALS_API_BASE_URL": "https://intervals.icu/api/v1",
"ATHLETE_ID": "<YOUR_ATHLETE_ID>",
"API_KEY": "<YOUR_API_KEY>",
"LOG_LEVEL": "INFO"
}
}
}
}
Then tail the log file to see output in real-time:
tail -f /path/to/intervals-mcp-server/mcp-server.log
Windows — modify your claude_desktop_config.json like this:
{
"mcpServers": {
"Intervals.icu": {
"command": "powershell",
"args": [
"-Command",
"C:\\Users\\<USERNAME>\\.local\\bin\\uv.exe run --with 'mcp[cli]' --with-editable C:\\path\\to\\intervals-mcp-server mcp run C:\\path\\to\\intervals-mcp-server\\src\\intervals_mcp_server\\server.py 2>> C:\\path\\to\\intervals-mcp-server\\mcp-server.log"
],
"env": {
"INTERVALS_API_BASE_URL": "https://intervals.icu/api/v1",
"ATHLETE_ID": "<YOUR_ATHLETE_ID>",
"API_KEY": "<YOUR_API_KEY>",
"LOG_LEVEL": "INFO"
}
}
}
}
Then monitor the log file in real-time using PowerShell:
Get-Content C:\path\to\intervals-mcp-server\mcp-server.log -Wait
The GNU General Public License v3.0
A Jetbrains IDE IntelliJ plugin aimed to provide coding agents the ability to leverage intelliJ's indexing of the codeba
Run Claude Code as an MCP server so any agent can delegate coding tasks to it
Browser automation using accessibility snapshots instead of screenshots