Model Context Protocol (MCP) server for connecting Claude with the Intervals.icu API. It provides tools for authentication and data retrieval for activities, events, and wellness data.
- Python 3.10 or higher
- Model Context Protocol (MCP) Python SDK
- httpx
- python-dotenv
curl -LsSf https://astral.sh/uv/install.sh | shgit clone https://github.com/mvilanova/intervals-mcp-server.git
cd intervals-mcp-server# Create virtual environment
uv venv
# Activate virtual environment
# On macOS/Linux:
source .venv/bin/activate
# On Windows:
.venv\Scripts\activateuv pip install -e .Make a copy of .env.example and name it .env by running the following command:
cp .env.example .envThen 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
- Log in to your Intervals.icu account
- Go to Settings > API
- Generate a new API key
Your athlete ID is typically visible in the URL when you're logged into Intervals.icu. It looks like:
https://intervals.icu/athlete/i12345/...wherei12345is your athlete ID
To use this server with Claude Desktop, you need to add it to your Claude Desktop configuration.
- Run the following from the
intervals_mcp_serverdirectory to configure Claude Desktop:
mcp install src/intervals_mcp_server/server.py --name "Intervals.icu MCP Server"- If you open your Claude Desktop App configuration file
claude_desktop_config.json, it should look like this:
{
"mcpServers": {
"Intervals.icu": {
"command": "uv",
"args": [
"run",
"--with",
"mcp[cli]",
"mcp",
"run",
"/path/to/intervals-mcp-server/src/intervals_mcp_server/server.py"
]
}
}
}Where /path/to/ is the path to the intervals-mcp-server code folder in your system.
- Restart Claude Desktop.
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_wellness_data: Fetch wellness dataget_events: Retrieve upcoming events (workouts, races, etc.)get_event_by_id: Get detailed information for a specific event
The GNU General Public License v3.0