rusty-intervals
Fast and lightweight MCP server for intervals.icu
claude mcp add --transport stdio like-a-freedom-rusty-intervals-mcp docker run -i rusty-intervals:latest \ --env INTERVALS_ICU_API_KEY="your_api_key_here" \ --env INTERVALS_ICU_ATHLETE_ID="i123456"
How to use
rusty-intervals is a token-efficient MCP server for Intervals.icu, implemented in Rust to minimize LLM context usage while exposing a rich set of tools across nine categories (Activities, Activity Analysis, Athlete, Wellness, Events/Calendar, Performance/Curves, Workout Library, Gear Management, Sport Settings). The server auto-generates its toolset from the live Intervals.icu OpenAPI spec, so new endpoints and schemas appear after startup without manual updates. Tools return compact, summarized results by default, with opt-in expansions when detailed payloads are needed. To use it, provide your Intervals.icu API key and your athlete ID, then run the server via Docker or a local Rust build. The MCP surface includes predefined prompts (templates) and a single MCP resource (Athlete profile) to keep context focused on what the LLM needs for the current task.
How to install
Prerequisites:
- Docker installed on your machine
- Or Rust toolchain (Rust 1.92+ with Cargo) if you prefer building from source
Option A: Install via Docker (recommended for quick start)
- Build or pull the image (if you don’t have a prebuilt image, build locally):
# If you have a Dockerfile in the repo
# docker build -t rusty-intervals:latest .
- Create an environment file with your credentials:
cat > intervals-icu.env <<EOF
INTERVALS_ICU_API_KEY=your_api_key_here
INTERVALS_ICU_ATHLETE_ID=i123456
EOF
- Run the container, wiring in the env file as needed by your setup:
docker run -i --env-file intervals-icu.env rusty-intervals:latest
Option B: Build from source with Cargo (Rust)
- Install Rust (1.92+) and Cargo from https://rustup.rs/
- Clone the repository and build:
git clone https://github.com/like-a-freedom/rusty-intervals-mcp.git
cd rusty-intervals-mcp
cargo build --release
- Create an environment file and run the binary:
cp .env.example .env
# Edit .env to add credentials:
# INTERVALS_ICU_API_KEY=your_api_key_here
# INTERVALS_ICU_ATHLETE_ID=i123456
export INTERVALS_ICU_API_KEY=your_api_key_here
export INTERVALS_ICU_ATHLETE_ID=i123456
./target/release/intervals_icu_mcp
Option C: Install via cargo install (if the crate publishes a binary)
cargo install --path crates/intervals_icu_mcp
export INTERVALS_ICU_API_KEY=your_api_key_here
export INTERVALS_ICU_ATHLETE_ID=i123456
intervals_icu_mcp
Additional notes
Environment variables: you must provide INTERVALS_ICU_API_KEY and INTERVALS_ICU_ATHLETE_ID either via a .env file or directly in your shell. The server fetches tool definitions dynamically from the Intervals.icu OpenAPI spec at startup, so occasional restarts may be needed after API schema changes. When running in Docker, consider using a mounted volume for the .env file or an --env-file to separate credentials from image metadata. If you see token-bloat in responses, rely on the default compact mode; you can opt-in to expanded fields per call if you truly need full payload details. The MCP surface includes a single resource (Athlete profile) plus 7 prompts to drive common training and performance analyses.
Related MCP Servers
Gitingest
mcp server for gitingest
mcp-probe
A Model Context Protocol (MCP) client library and debugging toolkit in Rust. This foundation provides both a production-ready SDK for building MCP integrations and the core architecture for an interactive debugger.
surrealmcp
The official MCP server for SurrealDB
mcp-framework
Rust MCP framework for building AI agents
trainingpeaks
TrainingPeaks MCP server for Claude Desktop. No API approval needed - works with any account. Query workouts, CTL/ATL/TSB fitness data, power PRs via natural language.
daedra
Daedra is a high-performance DuckDuckGo-powered web search and research Model Context Protocol (MCP) server written in Rust. It provides web search and page fetching capabilities that can be used with AI assistants like Claude.