# Intervals.icu MCP

> Lets your agent read and plan your Intervals.icu training: activities, fitness and fatigue, wellness, calendar workouts and gear.

A community MCP server for Intervals.icu, the training analysis platform, by Heiko Kromminga (hhopke). It runs on your computer with your own Intervals.icu API key, so your agent can read your training data and plan workouts from the chat. It isn't affiliated with or endorsed by Intervals.icu. It started as a continuation of eddmann/intervals-icu-mcp and is maintained on its own.

What you can do with it
- Find, search and update activities, and download their FIT or GPX files
- Dig into an activity: data streams, intervals, best efforts, and power, heart-rate and pace histograms
- Check fitness, fatigue and form (CTL, ATL and TSB), and your power, heart-rate and pace curves
- Read and update wellness data such as HRV and sleep
- See your calendar and annual training plan, and create, move, copy or delete planned workouts and events
- Build structured cycling, running and swimming workouts in Intervals.icu's workout syntax, and manage your workout library
- Track gear and maintenance reminders, and update sport settings such as FTP, thresholds and zones
- Read and post notes on activities; coaches can work with the athletes they have access to

How it connects
It's a Python package that runs locally with uvx (part of uv). Create an API key in Intervals.icu under Settings → Developer, note your athlete ID from your profile URL (it looks like i123456), and set them as INTERVALS_ICU_API_KEY and INTERVALS_ICU_ATHLETE_ID. The README covers Claude Desktop, Claude Code and Cursor, and there's a Docker image too. It also ships prompt templates, such as a recovery check, a weekly plan and a workout generator.

Good to know
- Deleting is limited by default. In safe mode it only deletes events from tomorrow on, gear, library workouts and empty folders, never past activities. Set INTERVALS_ICU_DELETE_MODE to full to allow more, or to none to turn deleting off.
- It can also run over HTTP or SSE for remote use, but that mode has no sign-in of its own, so only expose it through a tunnel or an authenticating proxy.
- Free and open source under the MIT licence.

- Type: Plugin
- Made by: hhopke
- Category: Health & fitness
- Formats: Local MCP
- Version: 5.7.1
- Source: https://github.com/hhopke/intervals-icu-mcp
- Page: https://pluginboard.ai/plugins/intervals-icu-mcp

## Works with

- Claude
- GitHub Copilot
- Cursor
- Claude Code
- Codex
- Antigravity
- Gemini CLI
- OpenClaw
- OpenCode
- Hermes Agent

## Install

You'll need:

- `INTERVALS_ICU_API_KEY` (required): Your Intervals.icu API key (from Settings → Developer)
- `INTERVALS_ICU_ATHLETE_ID` (required): Your Intervals.icu athlete ID (e.g. i12345)

Replace each `<NAME>` placeholder with your own value.

### Claude

Add to claude_desktop_config.json:

```json
{
  "mcpServers": {
    "intervals-icu-mcp": {
      "command": "uvx",
      "args": [
        "intervals-icu-mcp==5.7.1"
      ],
      "env": {
        "INTERVALS_ICU_API_KEY": "<INTERVALS_ICU_API_KEY>",
        "INTERVALS_ICU_ATHLETE_ID": "<INTERVALS_ICU_ATHLETE_ID>"
      }
    }
  }
}
```

### GitHub Copilot

Add to VS Code: vscode:mcp/install?%7B%22name%22%3A%22intervals-icu-mcp%22%2C%22command%22%3A%22uvx%22%2C%22args%22%3A%5B%22intervals-icu-mcp%3D%3D5.7.1%22%5D%2C%22env%22%3A%7B%22INTERVALS_ICU_API_KEY%22%3A%22%3CINTERVALS_ICU_API_KEY%3E%22%2C%22INTERVALS_ICU_ATHLETE_ID%22%3A%22%3CINTERVALS_ICU_ATHLETE_ID%3E%22%7D%7D

Run in your terminal:

```shell
code --add-mcp '{"name":"intervals-icu-mcp","command":"uvx","args":["intervals-icu-mcp==5.7.1"],"env":{"INTERVALS_ICU_API_KEY":"<INTERVALS_ICU_API_KEY>","INTERVALS_ICU_ATHLETE_ID":"<INTERVALS_ICU_ATHLETE_ID>"}}'
```

Copilot CLI:

```shell
copilot mcp add intervals-icu-mcp --env INTERVALS_ICU_API_KEY=<INTERVALS_ICU_API_KEY> --env INTERVALS_ICU_ATHLETE_ID=<INTERVALS_ICU_ATHLETE_ID> -- uvx intervals-icu-mcp==5.7.1
```

### Cursor

Add to Cursor: cursor://anysphere.cursor-deeplink/mcp/install?name=intervals-icu-mcp&config=eyJjb21tYW5kIjoidXZ4IiwiYXJncyI6WyJpbnRlcnZhbHMtaWN1LW1jcD09NS43LjEiXSwiZW52Ijp7IklOVEVSVkFMU19JQ1VfQVBJX0tFWSI6IjxJTlRFUlZBTFNfSUNVX0FQSV9LRVk%2BIiwiSU5URVJWQUxTX0lDVV9BVEhMRVRFX0lEIjoiPElOVEVSVkFMU19JQ1VfQVRITEVURV9JRD4ifX0%3D

Add to .cursor/mcp.json:

```json
{
  "mcpServers": {
    "intervals-icu-mcp": {
      "command": "uvx",
      "args": [
        "intervals-icu-mcp==5.7.1"
      ],
      "env": {
        "INTERVALS_ICU_API_KEY": "<INTERVALS_ICU_API_KEY>",
        "INTERVALS_ICU_ATHLETE_ID": "<INTERVALS_ICU_ATHLETE_ID>"
      }
    }
  }
}
```

### Claude Code

Run in your terminal:

```shell
claude mcp add -e INTERVALS_ICU_API_KEY=<INTERVALS_ICU_API_KEY> -e INTERVALS_ICU_ATHLETE_ID=<INTERVALS_ICU_ATHLETE_ID> intervals-icu-mcp -- uvx intervals-icu-mcp==5.7.1
```

### Codex

Run in your terminal:

```shell
codex mcp add --env INTERVALS_ICU_API_KEY=<INTERVALS_ICU_API_KEY> --env INTERVALS_ICU_ATHLETE_ID=<INTERVALS_ICU_ATHLETE_ID> intervals-icu-mcp -- uvx intervals-icu-mcp==5.7.1
```

### Antigravity

Add to ~/.gemini/config/mcp_config.json:

```json
{
  "mcpServers": {
    "intervals-icu-mcp": {
      "command": "uvx",
      "args": [
        "intervals-icu-mcp==5.7.1"
      ],
      "env": {
        "INTERVALS_ICU_API_KEY": "<INTERVALS_ICU_API_KEY>",
        "INTERVALS_ICU_ATHLETE_ID": "<INTERVALS_ICU_ATHLETE_ID>"
      }
    }
  }
}
```

### Gemini CLI

Run in your terminal:

```shell
gemini mcp add -e INTERVALS_ICU_API_KEY=<INTERVALS_ICU_API_KEY> -e INTERVALS_ICU_ATHLETE_ID=<INTERVALS_ICU_ATHLETE_ID> intervals-icu-mcp uvx intervals-icu-mcp==5.7.1
```

### OpenClaw

In a terminal: Run openclaw mcp add intervals-icu-mcp --command uvx, with --arg before each argument (intervals-icu-mcp==5.7.1) and --env NAME=value for each variable it needs.

### OpenCode

Run in your terminal:

```shell
opencode mcp add intervals-icu-mcp --env INTERVALS_ICU_API_KEY=<INTERVALS_ICU_API_KEY> --env INTERVALS_ICU_ATHLETE_ID=<INTERVALS_ICU_ATHLETE_ID> -- uvx intervals-icu-mcp==5.7.1
```

### Hermes Agent

Add to ~/.hermes/config.yaml:

```json
{
  "mcp_servers": {
    "intervals-icu-mcp": {
      "command": "uvx",
      "args": [
        "intervals-icu-mcp==5.7.1"
      ],
      "env": {
        "INTERVALS_ICU_API_KEY": "<INTERVALS_ICU_API_KEY>",
        "INTERVALS_ICU_ATHLETE_ID": "<INTERVALS_ICU_ATHLETE_ID>"
      }
    }
  }
}
```

---
From Pluginboard (https://pluginboard.ai).
