intervals-mcp-server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@intervals-mcp-servershow my last week's activities and wellness data"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
intervals-mcp-server
A Model Context Protocol (MCP) server for the Intervals.icu API. Connects Claude, Cursor, ChatGPT and any other MCP client to your training data — activities, events, wellness metrics, power curves, gear and custom items.
Zero-config first run: npx intervals-mcp-server@latest walks you through
authentication in your terminal and saves everything for future runs.
Requirements
Node.js ≥ 18.19
An Intervals.icu account
Related MCP server: Intervals.icu MCP
Quick start
1. Authenticate (once)
npx intervals-mcp-server authThe wizard will:
Open https://intervals.icu/settings in your browser
Ask you to copy two values from that page:
API Key — the "API Key" row, click Show
Athlete ID — shown on the same page (e.g.
123456ori12345)
Verify them against the live API
Save them to
~/.config/intervals-mcp-server/config.json(permissions0600)Print ready-to-paste snippets for your MCP client
2. Add the server to your MCP client
Claude Code
claude mcp add intervals -s user -- npx intervals-mcp-server@latestClaude Desktop — ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"intervals": { "command": "npx", "args": ["intervals-mcp-server@latest"] }
}
}Cursor — ~/.cursor/mcp.json:
{
"mcpServers": {
"intervals": { "command": "npx", "args": ["intervals-mcp-server@latest"] }
}
}Done — the client spawns the server via npx and all tools are available.
Why a config file instead of env vars? MCP clients spawn servers with a minimal environment, so shell exports like
API_KEYare not inherited automatically. The wizard-written config file works everywhere. Env vars are still supported and take precedence when declared in the client config.
Alternative: environment variables
If you prefer declaring credentials in your MCP client config:
{
"mcpServers": {
"intervals": {
"command": "npx",
"args": ["intervals-mcp-server@latest"],
"env": {
"API_KEY": "your-api-key",
"ATHLETE_ID": "your-athlete-id"
}
}
}
}Resolution order: API_KEY / ATHLETE_ID env vars → config file.
INTERVALS_API_BASE_URL overrides the API base URL (default https://intervals.icu/api/v1).
Tools (20)
Area | Tools |
Activities |
|
Events & calendar |
|
Wellness |
|
Power curves |
|
Gear |
|
Custom items |
|
Tool names use stable snake_case identifiers, so prompts and integrations keep working across updates.
Data completeness & provenance
Activities can arrive partially — the activity record lands before all streams and server-side analysis finish. To keep the model from answering confidently from half-synced data, the activity tools surface native API signals and derive a verdict from them:
get_activities— one-lineSync:verdict per activity (complete / pending / incomplete) plus last-sync time and upstream sourceget_activity_details— full Sync & Data Completeness section:analyzed,icu_sync_date,icu_sync_error,analysis_issues,stream_types,source/external_idget_activity_streams— warns when a requested stream type is missing (it may still be syncing) instead of silently omitting it
The verdict is marked (derived) — the API has no explicit completeness
flag. Caveat per the Intervals.icu maintainer: analyzed may stay null on
Strava-sourced activities while the data is fine; those are reported as
pending rather than incomplete.
Stream quirk handled for you: the latlng stream stores latitude in
data and longitude in a sibling data2 field; the streams tool zips
them into [lat, lng] points so the longitude half isn't lost.
CLI reference
intervals-mcp-server # serve over stdio; with no credentials yet and an
# interactive terminal, run the setup wizard instead
# (exits after saving so clients spawn a clean process)
intervals-mcp-server auth # (re)run the credential wizard
intervals-mcp-server serve # start the server without the onboarding check
--transport stdio|streamable-http # transport (default stdio)
--host <host> # HTTP host (default 127.0.0.1)
--port <port> # HTTP port (default 8765)Streamable HTTP transport
For remote setups (e.g. behind a tunnel for ChatGPT custom connectors):
npx intervals-mcp-server serve --transport streamable-http --port 8765
# MCP endpoint: http://127.0.0.1:8765/mcpDevelopment
pnpm install
pnpm build # tsup → dist/
pnpm test # vitest (114 tests)
pnpm typecheck # tsc --noEmit
pnpm smoke # end-to-end: spawn server, listTools, live API calls
# (needs API_KEY / ATHLETE_ID)Publishing
Releases are published by GitHub Actions (.github/workflows/publish.yml):
# bump "version" in package.json, commit, then:
git tag vX.Y.Z
git push origin vX.Y.ZThe workflow installs dependencies, runs typecheck + tests + build, then
publishes to npm with provenance using the NPM_TOKEN repository secret.
License
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
No tool schema history has been recorded yet.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Remote MCP server for training, nutrition, wellness, and performance data with OAuth 2.0.
Hosted MCP server with managed OAuth for 15+ toolkits: Google Workspace, Fitbit, Oura, Kalshi, etc.
Multi-tenant hosted MCP server for Oura Ring — 21 read-only tools, OAuth per user.
Pace is a remote MCP server that exposes wearable and fitness data to Claude via the Model Context Protocol. It connects to Garmin, Oura, Whoop, Polar, Fitbit and 20+ devices and provides 15 tools for querying sleep, activity, recovery, and training data. Hosted on Google Cloud Run, OAuth 2.1 authentication, Streamable HTTP transport. Instructions: First you need to create an account at: https://pacetraining.co and connect your wearables. After that you can connect the remote Server via Custom Connector in Claude and OAuth 2.1 Flow startet.
Related MCP Servers
- AlicenseAqualityAmaintenanceRead/write MCP server for Intervals.icu — 51 tools spanning activities, streams, wellness, calendar, gear, and sport zones, plus structured workout generation with a built-in syntax reference for cycling, running, and swimming.5863MIT
- FlicenseNot gradedqualityBmaintenanceEnables interaction with the Intervals.icu API, providing tools to manage workouts, messages, wellness data, and more through any MCP client.3-
- AlicenseAqualityBmaintenanceMCP server that connects AI agents to Intervals.icu, enabling access to training data such as activities, wellness metrics, calendar events, gear, power curves, and custom items. Includes a running coach AI template for automated post-session analysis.19291MIT
- AlicenseNot gradedqualityBmaintenanceMCP server that connects Claude and ChatGPT to the Intervals.icu API, enabling retrieval and management of activities, events, wellness data, power curves, and custom items.GPL 3.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/HduSy/intervals-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server