intervals.icu MCP Server
Enables Claude AI to access and manage intervals.icu training data, including workouts, wellness, and fitness trends, through natural language conversation.
README
intervals.icu Desktop + MCP Server
🏃 Your AI coaching assistant for intervals.icu training data
A standalone desktop application + Model Context Protocol (MCP) server that gives you complete access to intervals.icu training data through Claude AI. Manage every aspect of your training through natural conversation — from logging wellness data to organizing workout libraries to analyzing fitness trends.
�️ Standalone Desktop Application
A self-contained, production-ready desktop application for macOS and Windows. No manual Claude Desktop configuration needed. Just install, authenticate, and start asking Claude about your training data.
📥 Downloads (v1.0.0)
✅ macOS (Ready to download):
- 📦 IntervalsICU-1.0.0.dmg (33 MB) — Ready for installation
- 📋 Build Details — Build information and requirements
🚀 Seamless One-Click Installation
The DMG includes an automated install.sh script that handles everything automatically:
# 1. Mount the DMG (or double-click in Finder)
hdiutil attach IntervalsICU-1.0.0.dmg
# 2. Run the install script from the mounted volume
/Volumes/IntervalsICU/install.sh
# Or simply double-click install.sh in Finder
The script automatically:
- ✅ Detects and validates the app bundle
- ✅ Copies to
/Applicationsfolder - ✅ Removes Gatekeeper quarantine attribute (eliminates "can't scan for malware" warnings)
- ✅ Verifies installation completeness
- ✅ Provides helpful error messages if issues occur
Installation options:
# Standard installation to /Applications
./install.sh
# Custom destination folder
./install.sh --dest ~/Desktop/Apps
# Force replacement if app already exists
./install.sh --force
# Verbose output for troubleshooting
./install.sh --verbose
# Show help
./install.sh --help
⚙️ Manual Installation (Alternative)
If you prefer to install manually:
- Mount the DMG file (double-click)
- Drag
IntervalsICU.appto your Applications folder - Resolve Gatekeeper warnings (see troubleshooting below)
Troubleshooting – "Can't be scanned for malware" Error:
If you see a macOS warning that the app "can't be opened because it can't be scanned for malware":
Option 1 — Quick Fix (Recommended):
# Remove the quarantine attribute (one-time command)
xattr -d com.apple.quarantine /Applications/IntervalsICU.app
Option 2 — Using the Fix Script (from DMG):
# From the mounted DMG, run the provided fix script
/Volumes/IntervalsICU/fix-gatekeeper.sh /Applications/IntervalsICU.app
Option 3 — Manual Trust:
- Right-click
IntervalsICU.appand select "Open" - Click "Open" in the security dialog (one-time prompt)
- App will be added to trusted apps
Windows (Coming soon): NSIS installer in development
✨ Key Features
- 🔐 Secure credential storage via OS-native Keychain (macOS) / Credential Manager (Windows)
- 💬 Conversational interface with Claude for natural-language training queries
- ⚙️ In-app settings management with API key updates and log viewing
- 🔄 Automatic update checking for new releases
- 📊 Performance monitoring and latency tracking
- 🎯 Context-aware help system with error guidance
- 🔒 99.5% uptime SLO with process resilience
Getting Started
# 1. Install dependencies
pip install -r requirements.txt
# 2. Configure credentials (interactive on first launch)
# Or use environment variables:
export INTERVALS_API_KEY="your_key_here"
export INTERVALS_ATHLETE_ID="i230309"
export ANTHROPIC_API_KEY="sk-ant-..."
# 3. Launch the desktop app
python -m desktop_app.main
Build & Deploy
macOS — ✅ Build Complete
The macOS distribution includes a seamless one-click installation experience:
Distribution Artifacts:
- Distributable
.dmgavailable: IntervalsICU-1.0.0.dmg - Includes
install.sh— Automated installation script (handles Gatekeeper quarantine removal) - Includes
fix-gatekeeper.sh— Manual Gatekeeper resolution tool - Build branch:
build/macos-dmg-v1.0.0
Build Toolchain:
- PyInstaller 6.11.0+ — Bundles Python app to
.appformat - create-dmg 1.3.3 — Creates professional DMG distribution
- Code signing with ad-hoc signatures + xattr Gatekeeper bypass
To rebuild locally:
chmod +x packaging/macos/build.sh
./packaging/macos/build.sh --version 1.0.0
# Add --sign --notarize for production builds (requires Developer ID)
Build Output:
dist/macos/IntervalsICU-1.0.0.dmg(~32 MB, 64.7% compression)- Contains: IntervalsICU.app, install.sh, fix-gatekeeper.sh, Applications symlink
Installation Scripts:
- packaging/macos/install.sh — Main automated installer (520 lines, 16 functions)
- packaging/macos/fix-gatekeeper.sh — Standalone Gatekeeper resolver
- packaging/macos/README.md — Build documentation and workflow
Windows — In Development
- NSIS installer coming soon
- Build script:
packaging/windows/build.ps1
Testing
# Fast unit + integration tests
pytest tests/unit tests/integration -v
# Full test matrix
pytest tests/ -v -m "not e2e"
# All tests including e2e
pytest tests/ -v
📡 MCP Server for Claude Desktop
For users preferring Claude Desktop integration instead of the standalone app, the MCP server is also available:
# 1. Install and configure
pip install -r requirements.txt
cp .env.example .env
# Edit .env with your intervals.icu and Anthropic credentials
# 2. Run the MCP server
python server.py
# 3. In Claude Desktop config, add to `mcpServers`:
# {
# "intervals-icu": {
# "command": "python",
# "args": ["/path/to/server.py"],
# "env": {
# "INTERVALS_API_KEY": "your_key",
# "INTERVALS_ATHLETE_ID": "i230309",
# "INTERVALS_API_BASE_URL": "https://intervals.icu/api/v2"
# }
# }
# }
📖 Documentation
| File | Purpose |
|---|---|
| README.md (this file) | Feature overview, installation, and usage examples |
| QUICKSTART.md | Fast setup guide with troubleshooting tips |
| API_REFERENCE.md | Complete endpoint specifications and parameters |
| CHANGELOG.md | Version history and release notes |
| EXTENSION_SUMMARY.md | Technical architecture and implementation details |
| PROJECT_SUMMARY.md | Project metrics, deliverables, and completion status |
🖼️ Pre-Download UI Preview
Feature 004 adds a desktop-first browser preview so users can try the core chat UX before downloading the DMG.
Run locally
# from repository root
python -m http.server 8000
# then open http://localhost:8000/preview/
What the preview includes
- Interactive chat demo with deterministic simulated responses
- Authentication walkthrough with API-key guidance links
- Settings/help feature tour
- Download CTAs for macOS and Windows
- Fallback banner when preview modules fail to initialize
Validation tests
pytest tests/unit/test_preview_templates.py \
tests/unit/test_preview_no_live_llm.py \
tests/unit/test_preview_accessibility.py -v
pytest tests/integration/test_preview_*.py -v
pytest tests/e2e/test_preview_*.py -v
This preview intentionally uses sample data only and never accepts real credentials.
🎉 What's New in v1.0.0
Standalone Desktop Application Release — ✅ Now Available
A complete rewrite bundling the MCP server with a Claude-powered conversational UI for macOS and Windows:
📦 Release Status:
- ✅ macOS (.dmg) — Available — Download v1.0.0
- ⏳ Windows (NSIS) — In progress
- ✅ Source code — Tagged v1.0.0
Features:
- ✅ Standalone Desktop App — No Claude Desktop configuration needed
- ✅ Secure Credential Storage — OS-native Keychain/Credential Manager integration
- ✅ Conversational AI Interface — Ask Claude natural-language questions about your training
- ✅ 36 API Tools — Complete intervals.icu API coverage (~95%)
- ✅ In-App Settings — Update credentials, manage logging, check for updates
- ✅ 99.5% SLO — Process resilience with uptime tracking
- ✅ SC-004 Compliance — Response quality evaluation (95% pass threshold)
- ✅ Comprehensive Testing — 40+ tests covering unit/integration/performance/evaluation
- ✅ Production Packaging — Code-signed releases for macOS; NSIS installers for Windows
- ✅ Help & Guidance — Context-aware tooltips, FAQ, error remediation
v2.1.0 MCP Server (Foundation)
The underlying MCP server that powers the desktop app and can be used with Claude Desktop:
- ✅ Full CRUD operations on all major entities
- ✅ Workout Library management (9 tools)
- ✅ Training Plans support (4 tools)
- ✅ Coaching features (2 tools)
- ✅ Bulk operations and CSV export
- ✅ Complete documentation suite
Comparison: Desktop App vs MCP-Only
| Feature | Desktop App (v1.0) | MCP Server (v2.1) |
|---|---|---|
| Total API Tools | 36 | 36 |
| Installation | ✅ One-click | ⚠️ Manual config |
| Claude Integration | ✅ Built-in | ✅ Claude Desktop |
| Credential Storage | ✅ Secure (OS) | ⚠️ .env file |
| Conversational UI | ✅ Yes | ❌ No |
| Settings Management | ✅ In-app | ❌ Manual |
| Update Checking | ✅ Automatic | ❌ Manual |
| Help & Guidance | ✅ Yes | ❌ No |
| Uptime Monitoring | ✅ 99.5% SLO | ❌ No |
| API Coverage | ~95% | ~95% |
| Supported Endpoints | All 36 tools | All 36 tools |
✨ API Features
👤 Athlete Profile
get_athlete_profile— Retrieve FTP, weight, training zones, and account settings
💪 Wellness & Recovery
get_wellness_data— Daily wellness metrics for a date rangeget_wellness_single— Wellness data for a specific dateupdate_wellness— Update a single wellness entryupdate_wellness_bulk— Batch-update multiple wellness entries
Metrics covered: sleep quality and duration, HRV, resting heart rate, weight, body composition, subjective scores (fatigue, soreness, stress, motivation), readiness, CTL/ATL/TSB.
🚴 Training Activities
get_activities— Workouts for a date range with key metricsget_activities_csv— Export all activities to CSVget_activity_details— Granular data including power/HR streams and detected intervalsupdate_activity— Modify name, description, or typedelete_activity— Remove an activity
📊 Fitness Analytics
get_fitness_trends— CTL (Fitness), ATL (Fatigue), TSB (Form), and ramp rateget_power_curve— Best power efforts across different durations
📅 Calendar & Event Management
get_calendars— List all calendarsget_events— Planned races, workouts, and notesget_event— Details for a specific eventcreate_event— Add races, workouts, or notesupdate_event— Modify an existing eventdelete_event— Remove a calendar eventget_planned_workouts— Filter for upcoming scheduled training sessions
📚 Workout Library
get_folders/create_folder/update_folder/delete_folderget_workouts/get_workout/create_workout/update_workout/delete_workout
📈 Training Plans
get_training_plans/create_training_plan/update_training_plan/delete_training_plan
👥 Coaching
get_coached_athletes— Athletes you coach with current fitness metricsget_wellness_summary— Wellness overview for coached athletes
⚡ Quick Stats
| Metric | Value |
|---|---|
| Total API Tools | 36 |
| API Coverage | ~95% of public intervals.icu APIs |
| CRUD Support | Full (Create, Read, Update, Delete) |
| Code Lines | 1,106 |
| Documentation | 7 comprehensive guides |
| Supported Operations | GET, POST, PUT, DELETE |
🚀 Installation
💡 For a faster path, see QUICKSTART.md. It includes platform-specific notes and a comprehensive troubleshooting section.
Prerequisites
- Python 3.10 or higher
- Claude Desktop
- An active intervals.icu account with API access
1. Get Your API Credentials
- Log in to intervals.icu
- Navigate to Settings → Developer Settings (near the bottom)
- Click Generate API Key
- Note your athlete ID from the URL:
intervals.icu/athlete/{ATHLETE_ID}
⚠️ The athlete ID must include theiprefix (e.g.,i230309)
2. Install Python Dependencies
cd intervals-icu-mcp
pip install -r requirements.txt
Or install in development mode:
pip install -e .
3. Test the Server (Recommended)
export INTERVALS_API_KEY="your_api_key"
export INTERVALS_ATHLETE_ID="your_athlete_id" # e.g., i230309
export INTERVALS_API_BASE_URL="https://intervals.icu/api/v1"
python test_server.py
4. Configure Claude Desktop
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"intervals-icu": {
"command": "/usr/local/bin/python3",
"args": ["/absolute/path/to/intervals-icu-mcp/server.py"],
"env": {
"INTERVALS_API_KEY": "your_api_key_here",
"INTERVALS_ATHLETE_ID": "your_athlete_id_here",
"INTERVALS_API_BASE_URL": "https://intervals.icu/api/v1"
}
}
}
}
Important: Use the full path to Python (e.g.,
/usr/local/bin/python3, not justpython). On macOS, runwhich python3to find the correct path.
5. Restart Claude Desktop
Close and reopen Claude Desktop to load the MCP server.
💬 Usage Examples
Wellness & Recovery
- "What's my HRV trend over the past 2 weeks?"
- "Update my wellness for today: weight 70 kg, HRV 65 ms, sleep quality 4"
- "Am I getting enough recovery based on my recent wellness data?"
Training Analysis
- "Summarize my training volume for the past 30 days"
- "What were my hardest workouts this week?"
- "Export all my activities to CSV"
Fitness Trends
- "What's my current fitness (CTL) and form (TSB)?"
- "Am I building fitness too quickly? Check my ramp rate"
- "When was I at peak fitness in the last 90 days?"
Calendar & Planning
- "What races do I have coming up?"
- "Create a workout event for tomorrow: 60 min Z2 ride"
- "Delete the workout planned for next Tuesday"
Workout Library
- "List all my workout folders"
- "Add a new workout: 4×8 min @ 110% FTP with 4 min rest"
- "Create a folder called 'VO2max Sessions'"
Coaching
- "List all the athletes I coach"
- "What's the fitness trend for athlete John Doe?"
🔧 Troubleshooting
Server not appearing in Claude Desktop
- Verify the config file path is correct for your OS
- Validate JSON syntax:
python -m json.tool ~/Library/Application\ Support/Claude/claude_desktop_config.json - Confirm the absolute path to
server.pyis correct - Check that all three environment variables are present
401 / 403 Authentication Errors
- Confirm you're using v2.0.1 of
server.py(includes the authentication fix) - Ensure
INTERVALS_API_BASE_URLis set - Verify the athlete ID includes the
iprefix - Regenerate your API key in intervals.icu settings if needed
No Data Returned
- Use
YYYY-MM-DDdate format - Try a broader date range
- Confirm you have data in intervals.icu for the requested period
For a full troubleshooting guide, see QUICKSTART.md.
🔒 Privacy & Security
- API credentials are stored locally in the Claude Desktop config file
- All requests go directly from your machine to intervals.icu — no third parties
- Claude processes responses locally on your machine
- Proper HTTP Basic Auth encoding (base64) for API key transmission
- All user-supplied IDs and dates are validated before use to prevent injection
- Client-side rate limiting (10 req/sec) protects against accidental API abuse
- HTTP requests enforce timeouts (30s request, 10s connect) and connection pool limits
- Error messages are sanitized — internal paths and stack traces are never exposed to the client
.gitignoreprevents accidental commit of.envfiles and credential configs
Best practices:
- Never share your API key or config file
- Protect the config file with restrictive permissions:
chmod 600 claude_desktop_config.json - Regenerate your API key if you suspect compromise
🤝 Contributing
~95% of the public intervals.icu API is already covered. Potential areas for future contribution include FIT/GPX/TCX file uploads, workout file downloads (.zwo, .mrc, .erg), real-time activity streams, advanced analytics, and webhook integration.
When contributing:
- Match existing code style and naming conventions
- Add docstrings to all new tools
- Update relevant documentation (README, QUICKSTART, API_REFERENCE)
- Add test cases to
test_server.py
📋 Version History
v2.1.0 - Security Hardening (March 2025)
- ✅ Fixed Basic Auth encoding and removed credential leakage in debug logs
- ✅ Added input validation (dates, IDs), rate limiting, HTTP timeouts
- ✅ Sanitized error responses; added
.gitignorefor secrets protection
v2.0.0 - Major Release (March 2025)
- ✅ Extended from 8 to 36 API tools (4.5x increase)
- ✅ Added full CRUD operations on all major entities
- ✅ Workout Library management (9 new tools)
- ✅ Training Plans support (4 new tools)
- ✅ Coaching features (2 new tools)
- ✅ Bulk operations and CSV export
- ✅ Comprehensive documentation (7 guides)
v1.0.0 - Initial Release (March 2025)
- ✅ Basic read-only access to 8 core APIs
See CHANGELOG.md for detailed version history.
📜 License
MIT License — free to use and modify for your own training analysis needs.
🙏 Credits
Built for the Model Context Protocol to integrate intervals.icu with Claude Desktop.
- intervals.icu — comprehensive training analytics platform
- Anthropic — Claude and the MCP framework
- The intervals.icu community — API feedback and feature requests
💬 Support
- 📖 Setup: QUICKSTART.md
- 📚 API Reference: API_REFERENCE.md
- 📋 Changelog: CHANGELOG.md
- 🐛 Bug Reports: GitHub Issues
Made with ❤️ for athletes training smarter, not just harder
⭐ Star this repo if it's useful for your training!
v2.1.0 | Changelog | Quick Start | API Reference
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。