NestDaddy

Intervals Mcp

io.github.ljcl/intervals-mcp · v2.19.0

Remote MCP server for intervals.icu run data and analysis

Connect Runs on your machine

Terminal
claude mcp add intervals-mcp -e INTERVALS_API_KEY=<INTERVALS_API_KEY> -e INTERVALS_ATHLETE_ID=<INTERVALS_ATHLETE_ID> -e TZ=<TZ> -e ORS_API_KEY=<ORS_API_KEY> -e HOME_START=<HOME_START> -e OSM_EXTRACT_URL=<OSM_EXTRACT_URL> -e MCP_AUTH_TOKEN=<MCP_AUTH_TOKEN> -e PORT=<PORT> -e DATA_DIR=<DATA_DIR> -e ROUTE_RETENTION_DAYS=<ROUTE_RETENTION_DAYS> -e PUBLIC_URL=<PUBLIC_URL> -- docker run -i --rm ghcr.io/ljcl/intervals-mcp:2.19.0
claude_desktop_config.json
{
  "mcpServers": {
    "intervals-mcp": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "ghcr.io/ljcl/intervals-mcp:2.19.0"
      ],
      "env": {
        "INTERVALS_API_KEY": "<INTERVALS_API_KEY>",
        "INTERVALS_ATHLETE_ID": "<INTERVALS_ATHLETE_ID>",
        "TZ": "<TZ>",
        "ORS_API_KEY": "<ORS_API_KEY>",
        "HOME_START": "<HOME_START>",
        "OSM_EXTRACT_URL": "<OSM_EXTRACT_URL>",
        "MCP_AUTH_TOKEN": "<MCP_AUTH_TOKEN>",
        "PORT": "<PORT>",
        "DATA_DIR": "<DATA_DIR>",
        "ROUTE_RETENTION_DAYS": "<ROUTE_RETENTION_DAYS>",
        "PUBLIC_URL": "<PUBLIC_URL>"
      }
    }
  }
}
~/.cursor/mcp.json
{
  "mcpServers": {
    "intervals-mcp": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "ghcr.io/ljcl/intervals-mcp:2.19.0"
      ],
      "env": {
        "INTERVALS_API_KEY": "<INTERVALS_API_KEY>",
        "INTERVALS_ATHLETE_ID": "<INTERVALS_ATHLETE_ID>",
        "TZ": "<TZ>",
        "ORS_API_KEY": "<ORS_API_KEY>",
        "HOME_START": "<HOME_START>",
        "OSM_EXTRACT_URL": "<OSM_EXTRACT_URL>",
        "MCP_AUTH_TOKEN": "<MCP_AUTH_TOKEN>",
        "PORT": "<PORT>",
        "DATA_DIR": "<DATA_DIR>",
        "ROUTE_RETENTION_DAYS": "<ROUTE_RETENTION_DAYS>",
        "PUBLIC_URL": "<PUBLIC_URL>"
      }
    }
  }
}
.vscode/mcp.json
{
  "servers": {
    "intervals-mcp": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "ghcr.io/ljcl/intervals-mcp:2.19.0"
      ],
      "env": {
        "INTERVALS_API_KEY": "<INTERVALS_API_KEY>",
        "INTERVALS_ATHLETE_ID": "<INTERVALS_ATHLETE_ID>",
        "TZ": "<TZ>",
        "ORS_API_KEY": "<ORS_API_KEY>",
        "HOME_START": "<HOME_START>",
        "OSM_EXTRACT_URL": "<OSM_EXTRACT_URL>",
        "MCP_AUTH_TOKEN": "<MCP_AUTH_TOKEN>",
        "PORT": "<PORT>",
        "DATA_DIR": "<DATA_DIR>",
        "ROUTE_RETENTION_DAYS": "<ROUTE_RETENTION_DAYS>",
        "PUBLIC_URL": "<PUBLIC_URL>"
      }
    }
  }
}

Replace the values in angle brackets with your own. Keys stay on your machine; we never see them.

Tools

This server runs locally, so its tools are listed by your MCP client once it starts.

Environment variables

NameDescription
INTERVALS_API_KEY
Required, secret
intervals.icu personal API key (Settings, Developer Settings)
INTERVALS_ATHLETE_ID
Optional
Athlete id: 0 (default, the API key's own athlete) or e.g. i12345
TZ
Optional
IANA time zone for local dates, e.g. Australia/Sydney; unset or UTC follows the athlete's intervals.icu time zone (Etc/UTC pins UTC)
ORS_API_KEY
Optional, secret
OpenRouteService API key (openrouteservice.org) for generated route suggestions; unset offers past runs only
HOME_START
Optional, secret
Usual run start as lat,lng (e.g. 37.79,-122.39); unset infers it from recent GPS runs
OSM_EXTRACT_URL
Optional
URL of an .osm.pbf (e.g. a BBBike city or Geofabrik region) for the local OpenStreetMap index that counts road crossings in route suggestions; needs HOME_START
MCP_AUTH_TOKEN
Optional, secret
Shared secret (32+ characters) gating /mcp and detailed /health (recommended when internet-facing)
PORT
Optional
Server port, 1-65535 (default 3000)
DATA_DIR
Optional
Directory for stored routes (stitch-route, amend-route); the image uses /data, a volume in docker-compose.yml. Default ./data
ROUTE_RETENTION_DAYS
Optional
Days a stored route not read or changed is kept, 1-3650 (default 30)
PUBLIC_URL
Optional
Public URL, used only to warn when /mcp is exposed without MCP_AUTH_TOKEN

Details

Packageghcr.io/ljcl/intervals-mcp:2.19.0 (OCI, streamable-http)
First published11 Nov 2026
Last updated11 Nov 2026
Registry nameio.github.ljcl/intervals-mcp

More other servers See all

Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.