intervals-icu-mcp
Click on "Deploy 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-icu-mcp Show me my last 5 activities"
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.icu MCP Server

A Model Context Protocol (MCP) server for Intervals.icu integration. Access your training data, wellness metrics, and performance analysis through Claude and other LLMs.
Overview
This MCP server provides 48 tools to interact with your Intervals.icu account, organized into 9 categories:
Activities (10 tools) - Query, search, update, delete, and download activities
Activity Analysis (8 tools) - Deep dive into streams, intervals, best efforts, and histograms
Athlete (2 tools) - Access profile, fitness metrics, and training load
Wellness (3 tools) - Track and update recovery, HRV, sleep, and health metrics
Events/Calendar (9 tools) - Manage planned workouts, races, notes with bulk operations
Performance/Curves (3 tools) - Analyze power, heart rate, and pace curves
Workout Library (2 tools) - Browse and explore workout templates and plans
Gear Management (6 tools) - Track equipment and maintenance reminders
Sport Settings (5 tools) - Configure FTP, FTHR, pace thresholds, and zones
Additionally, the server provides:
1 MCP Resource - Athlete profile with fitness metrics for ongoing context
6 MCP Prompts - Templates for common queries (training analysis, performance analysis, activity deep dive, recovery check, training plan review, weekly planning)
Related MCP server: Garmin Connect MCP Server
Prerequisites
Python 3.11+ and uv, OR
Docker
Intervals.icu API Key Setup
Before installation, you need to obtain your Intervals.icu API key:
Scroll to the Developer section
Click Create API Key
Copy the API key (you'll use it during setup)
Note your Athlete ID from your profile URL (format:
i123456)
Installation & Setup
How Authentication Works
API Key - Simple API key authentication (no OAuth required)
Configuration - API key and athlete ID saved to
.envfileBasic Auth - HTTP Basic Auth with username "API_KEY" and your key as password
Persistence - Subsequent runs reuse stored credentials
Option 1: Using UV
# Install dependencies
cd intervals-icu-mcp
uv syncThen configure credentials using one of these methods:
Interactive Setup
uv run intervals-icu-mcp-authThis will prompt for your API key and athlete ID and save credentials to .env.
Manual Setup
Create a .env file manually:
INTERVALS_ICU_API_KEY=your_api_key_here
INTERVALS_ICU_ATHLETE_ID=i123456Option 2: Using Docker
# Build the image
docker build -t intervals-icu-mcp .Then configure credentials using one of these methods:
Interactive Setup
# Create the env file first (Docker will create it as a directory if it doesn't exist)
touch intervals-icu-mcp.env
# Run the setup script
docker run -it --rm \
-v "/ABSOLUTE/PATH/TO/intervals-icu-mcp.env:/app/.env" \
--entrypoint= \
intervals-icu-mcp:latest \
python -m intervals_icu_mcp.scripts.setup_authThis will prompt for credentials and save them to intervals-icu-mcp.env.
Manual Setup
Create an intervals-icu-mcp.env file manually in your current directory (see UV manual setup above for format).
Claude Desktop Configuration
Add to your configuration file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Using UV
{
"mcpServers": {
"intervals-icu": {
"command": "uv",
"args": [
"run",
"--directory",
"/ABSOLUTE/PATH/TO/intervals-icu-mcp",
"intervals-icu-mcp"
]
}
}
}Using Docker
{
"mcpServers": {
"intervals-icu": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v",
"/ABSOLUTE/PATH/TO/intervals-icu-mcp.env:/app/.env",
"intervals-icu-mcp:latest"
]
}
}
}Usage
Ask Claude to interact with your Intervals.icu data using natural language. The server provides tools, a resource, and prompt templates to help you get started.
Quick Start with MCP Prompts
Use built-in prompt templates for common queries (available via prompt suggestions in Claude):
analyze-recent-training- Comprehensive training analysis over a specified periodperformance-analysis- Analyze power/HR/pace curves and zonesactivity-deep-dive- Deep dive into a specific activity with streams, intervals, and best effortsrecovery-check- Recovery assessment with wellness trends and training loadtraining-plan-review- Weekly training plan evaluation with workout libraryplan-training-week- AI-assisted weekly training plan creation based on current fitness
Activities
"Show me my activities from the last 30 days"
"Get details for my last long run"
"Find all my threshold workouts"
"Update the name of my last activity"
"Delete that duplicate activity"
"Download the FIT file for my race"Activity Analysis
"Show me the power data from yesterday's ride"
"What were my best efforts in my last race?"
"Find similar interval workouts to my last session"
"Show me the intervals from my workout on Tuesday"
"Get the power histogram for my last ride"
"Show me the heart rate distribution for that workout"Athlete Profile & Fitness
"Show my current fitness metrics and training load"
"Am I overtraining? Check my CTL, ATL, and TSB"Note: The athlete profile resource (intervals-icu://athlete/profile) automatically provides ongoing context.
Wellness & Recovery
"How's my recovery this week? Show HRV and sleep trends"
"What was my wellness data for yesterday?"
"Update my wellness data for today - I slept 8 hours and feel great"Calendar & Planning
"What workouts do I have planned this week?"
"Create a threshold workout for tomorrow"
"Update my workout on Friday"
"Delete the workout on Saturday"
"Duplicate this week's plan for next week"
"Create 5 workouts for my build phase"Performance Analysis
"What's my 20-minute power and FTP?"
"Show me my heart rate zones"
"Analyze my running pace curve"Workout Library
"Show me my workout library"
"What workouts are in my threshold folder?"Gear Management
"Show me my gear list"
"Add my new running shoes to gear tracking"
"Create a reminder to replace my bike chain at 3000km"
"Update the mileage on my road bike"Sport Settings
"Update my FTP to 275 watts"
"Show my current zone settings for cycling"
"Set my running threshold pace to 4:30 per kilometer"
"Apply my new threshold settings to historical activities"Available Tools
Activities (10 tools)
Tool | Description |
| List recent activities with summary metrics |
| Get comprehensive details for a specific activity |
| Search activities by name or tag |
| Search activities with full details |
| Get activities before and after a specific one |
| Update activity name, description, or metadata |
| Delete an activity |
| Download original activity file |
| Download activity as FIT file |
| Download activity as GPX file |
Activity Analysis (8 tools)
Tool | Description |
| Get time-series data (power, HR, cadence, altitude, GPS) |
| Get structured workout intervals with targets and performance |
| Find peak performances across all durations in an activity |
| Find similar intervals across activity history |
| Get power distribution histogram for an activity |
| Get heart rate distribution histogram for an activity |
| Get pace distribution histogram for an activity |
| Get grade-adjusted pace histogram for an activity |
Athlete (2 tools)
Tool | Description |
| Get athlete profile with fitness metrics and sport settings |
| Get detailed CTL/ATL/TSB analysis with training recommendations |
Wellness (3 tools)
Tool | Description |
| Get recent wellness metrics with trends (HRV, sleep, mood, fatigue) |
| Get complete wellness data for a specific date |
| Update or create wellness data for a date |
Events/Calendar (9 tools)
Tool | Description |
| Get planned events and workouts from calendar |
| Get upcoming planned workouts only |
| Get details for a specific event |
| Create new calendar events (workouts, races, notes, goals) |
| Modify existing calendar events |
| Remove events from calendar |
| Create multiple events in a single operation |
| Delete multiple events in a single operation |
| Duplicate an event to a new date |
Performance/Curves (3 tools)
Tool | Description |
| Analyze power curves with FTP estimation and power zones |
| Analyze heart rate curves with HR zones |
| Analyze running/swimming pace curves with optional GAP |
Workout Library (2 tools)
Tool | Description |
| Browse workout folders and training plans |
| View all workouts in a specific folder |
Gear Management (6 tools)
Tool | Description |
| Get all gear items with usage and status |
| Add new gear to tracking |
| Update gear details, mileage, or status |
| Remove gear from tracking |
| Create maintenance reminders for gear |
| Update existing gear maintenance reminders |
Sport Settings (5 tools)
Tool | Description |
| Get sport-specific settings and thresholds |
| Update FTP, FTHR, pace threshold, or zone configuration |
| Apply updated settings to historical activities |
| Create new sport-specific settings |
| Delete sport-specific settings |
MCP Resources
Resources provide ongoing context to the LLM without requiring explicit tool calls:
Resource | Description |
| Complete athlete profile with current fitness metrics and sport settings |
MCP Prompts
Prompt templates for common queries (accessible via prompt suggestions in Claude):
Prompt | Description |
| Comprehensive training analysis over a specified period |
| Detailed power/HR/pace curve analysis with zones |
| Deep dive into a specific activity with streams, intervals, best efforts |
| Recovery assessment with wellness trends and training load |
| Weekly training plan evaluation with workout library |
| AI-assisted weekly training plan creation based on current fitness |
License
MIT License - see LICENSE file for details
Disclaimer
This project is not affiliated with, endorsed by, or sponsored by Intervals.icu. All product names, logos, and brands are property of their respective owners.
Available Tools
48 toolsapply_sport_settingsA
Apply sport settings (zones, thresholds) to historical activities.
This recalculates training load, zones, and other derived metrics for activities based on the current sport settings.
Args: sport_id: ID of the sport settings to apply oldest_date: Oldest date to apply settings to (optional, defaults to all)
Returns: Result of applying settings
Inputs: sport_id (required), oldest_date. Returns: result
bulk_create_eventsA
Create multiple calendar events in a single operation.
This is more efficient than creating events one at a time. Provide a JSON array of event objects, each with the same structure as create_event.
Args: events: JSON array of event objects to create
Returns: JSON string with created events
Inputs: events (required). Returns: result
bulk_delete_eventsA
Delete multiple calendar events in a single operation.
This is more efficient than deleting events one at a time. Provide a JSON array of event IDs to delete.
Args: event_ids: JSON array of event IDs (integers)
Returns: JSON string with deletion confirmation
Inputs: event_ids (required). Returns: result
create_eventA
Create a new calendar event (planned workout, note, race, or goal).
Adds an event to your Intervals.icu calendar. Events can be workouts with planned metrics, notes for tracking information, races, or training goals.
Args: start_date: Date in ISO-8601 format (YYYY-MM-DD) name: Name of the event category: Type of event - WORKOUT, NOTE, RACE, or GOAL description: Optional detailed description event_type: Activity type (e.g., "Ride", "Run", "Swim") for workouts duration_seconds: Planned duration for workouts distance_meters: Planned distance for workouts training_load: Planned training load for workouts
Returns: JSON string with created event data
Inputs: name (required), category (required), start_date (required), event_type, +4 more. Returns: result
create_gearA
Create a new gear item for tracking equipment usage and maintenance.
Args: name: Name of the gear item (e.g., "Road Bike", "Running Shoes") gear_type: Type of gear - BIKE, SHOE, TRAINER, WETSUIT, or OTHER brand: Brand name (optional) model: Model name (optional) active: Whether this gear is actively used (default: True) primary: Whether this is the primary gear of this type (default: False)
Returns: Created gear item with ID and initial stats
Inputs: name (required), gear_type (required), brand, model, +2 more. Returns: result
create_gear_reminderA
Create a maintenance reminder for a gear item.
Reminders can be based on distance, time, or both. When the threshold is reached, the reminder will be marked as due.
Args: gear_id: ID of the gear item text: Reminder text describing the maintenance task distance_alert: Alert every N kilometers (optional) time_alert: Alert every N hours (optional)
Returns: Created reminder details
Inputs: text (required), gear_id (required), time_alert, distance_alert. Returns: result
create_sport_settingsA
Create new sport-specific settings.
Args: sport_type: Type of sport (e.g., 'Ride', 'Run', 'Swim') ftp: Functional Threshold Power in watts (optional) fthr: Functional Threshold Heart Rate in bpm (optional) pace_threshold: Threshold pace in min/km (optional) swim_threshold: Swim threshold in min/100m (optional)
Returns: Created sport settings
Inputs: sport_type (required), ftp, fthr, pace_threshold, +1 more. Returns: result
delete_activityA
Delete an activity permanently.
Permanently removes an activity from your account. This action cannot be undone. Use with caution.
Args: activity_id: The unique ID of the activity to delete
Returns: JSON string with deletion confirmation
Inputs: activity_id (required). Returns: result
delete_eventA
Delete a calendar event.
Permanently removes an event from your calendar. This action cannot be undone.
Args: event_id: ID of the event to delete
Returns: JSON string with deletion confirmation
Inputs: event_id (required). Returns: result
delete_gearA
Delete a gear item permanently.
This will remove the gear item and all associated maintenance reminders. Activities that used this gear will not be affected.
Args: gear_id: ID of the gear item to delete
Returns: Deletion confirmation
Inputs: gear_id (required). Returns: result
delete_sport_settingsB
Delete sport-specific settings.
Args: sport_id: ID of the sport settings to delete
Returns: Deletion confirmation
Inputs: sport_id (required). Returns: result
download_activity_fileA
Download the original activity file.
Downloads the original file that was uploaded to Intervals.icu (FIT, TCX, or GPX). Can optionally save to a specified path.
Args: activity_id: The unique ID of the activity output_path: Optional path to save the file (e.g., "/path/to/activity.fit")
Returns: JSON string with file info and base64-encoded content (if no output_path)
Inputs: activity_id (required), output_path. Returns: result
download_fit_fileA
Download activity as a FIT file.
Converts and downloads the activity as a FIT (Flexible and Interoperable Data Transfer) file, which is compatible with Garmin and most training platforms.
Args: activity_id: The unique ID of the activity output_path: Optional path to save the file (e.g., "/path/to/activity.fit")
Returns: JSON string with file info and base64-encoded content (if no output_path)
Inputs: activity_id (required), output_path. Returns: result
download_gpx_fileA
Download activity as a GPX file.
Converts and downloads the activity as a GPX (GPS Exchange Format) file, which is compatible with most GPS devices and mapping software.
Args: activity_id: The unique ID of the activity output_path: Optional path to save the file (e.g., "/path/to/activity.gpx")
Returns: JSON string with file info and base64-encoded content (if no output_path)
Inputs: activity_id (required), output_path. Returns: result
duplicate_eventA
Duplicate an existing event to a new date.
Creates a copy of an event with all its properties (name, type, duration, etc.) but with a new date. Useful for repeating workouts or events.
Args: event_id: ID of the event to duplicate new_date: New date in YYYY-MM-DD format
Returns: JSON string with the duplicated event
Inputs: event_id (required), new_date (required). Returns: result
get_activities_aroundA
Get activities before and after a specific activity for context.
Retrieves activities chronologically surrounding a reference activity. Useful for understanding training context, progression, or finding related workouts.
Args: activity_id: The ID of the reference activity count: Number of activities to retrieve before and after (default 5)
Returns: JSON string with activities around the reference activity
Inputs: activity_id (required), count. Returns: result
get_activity_detailsA
Get detailed information for a specific activity.
Returns comprehensive activity details including all metrics, weather, and performance data.
Args: activity_id: The unique ID of the activity
Returns: JSON string with detailed activity information
Inputs: activity_id (required). Returns: result
get_activity_intervalsA
Get structured interval data for an activity.
Returns the intervals/segments of a workout, including targets, actual performance, and interval types (warm-up, work, rest, cool-down). Essential for analyzing structured workouts and training compliance.
Args: activity_id: The unique ID of the activity
Returns: JSON string with interval data
Inputs: activity_id (required). Returns: result
get_activity_streamsA
Get time-series data streams for an activity.
Returns second-by-second data for various metrics like power, heart rate, cadence, speed, altitude, etc. This data is essential for detailed workout analysis and visualization.
Available stream types:
watts: Power data
heartrate: Heart rate data
cadence: Cadence (rpm or spm)
velocity_smooth: Smoothed speed
altitude: Elevation
distance: Cumulative distance
time: Time stamps
latlng: GPS coordinates
temp: Temperature
moving: Moving status
grade_smooth: Gradient
Args: activity_id: The unique ID of the activity streams: Optional list of specific stream types to fetch
Returns: JSON string with time-series data streams
Inputs: activity_id (required), streams. Returns: result
get_athlete_profileB
Get the authenticated athlete's profile information.
Returns athlete profile including personal details, sport settings, and current fitness metrics (CTL, ATL, TSB).
Returns: JSON string with athlete profile data
Inputs: no named parameters. Returns: result
get_best_effortsA
Get best efforts/peak performances from an activity.
Analyzes the activity to find the best performances across various durations (e.g., best 5-second power, best 1-minute power, best 20-minute power). Similar to Strava segments but for all durations.
Args: activity_id: The unique ID of the activity
Returns: JSON string with best efforts data
Inputs: activity_id (required). Returns: result
get_calendar_eventsA
Get planned events and workouts from the calendar.
Returns calendar events including planned workouts, notes, races, and goals for the specified time period.
Args: days_ahead: Number of days to look ahead (default 7) days_back: Number of days to look back (default 0)
Returns: JSON string with calendar events
Inputs: days_back, days_ahead. Returns: result
get_eventA
Get detailed information for a specific calendar event.
Returns complete details for a single event including all metrics, descriptions, and workout structure.
Args: event_id: The unique ID of the event
Returns: JSON string with event details
Inputs: event_id (required). Returns: result
get_fitness_summaryA
Get the athlete's current fitness, fatigue, and form metrics.
Returns a comprehensive summary of training load metrics including:
CTL (Chronic Training Load / Fitness)
ATL (Acute Training Load / Fatigue)
TSB (Training Stress Balance / Form)
Ramp Rate (rate of fitness change)
Includes interpretations to help understand training status.
Returns: JSON string with fitness summary and recommendations
Inputs: no named parameters. Returns: result
get_gap_histogramA
Get grade-adjusted pace (GAP) histogram for an activity.
Analyzes grade-adjusted pace distribution, which normalizes pace for elevation changes. Useful for trail running to understand true effort distribution independent of terrain.
Args: activity_id: The unique ID of the activity
Returns: JSON string with GAP distribution bins
Inputs: activity_id (required). Returns: result
get_gear_listA
Get all gear items with usage statistics and maintenance reminders.
Returns: Formatted list of all gear with details, usage stats, and reminders
Inputs: no named parameters. Returns: result
get_hr_curvesA
Get heart rate curve data showing best efforts for various durations.
Analyzes heart rate data across activities to find peak heart rate outputs for different time durations (e.g., 5 seconds, 1 minute, 5 minutes, 20 minutes).
Useful for tracking cardiovascular fitness improvements and identifying HR zones across different effort durations.
Args: days_back: Number of days to analyze (overrides time_period) time_period: Time period shorthand - 'week' (7 days), 'month' (30 days), 'year' (365 days), 'all' (all time). Default is 90 days.
Returns: JSON string with HR curve data
Inputs: days_back, time_period. Returns: result
get_hr_histogramA
Get heart rate distribution histogram for an activity.
Analyzes how heart rate was distributed across the activity, showing time spent at different HR levels. Useful for understanding cardiovascular load and training zone distribution.
Args: activity_id: The unique ID of the activity
Returns: JSON string with HR distribution bins
Inputs: activity_id (required). Returns: result
get_pace_curvesA
Get pace curve data showing best efforts for various durations.
Analyzes pace data across running/swimming activities to find best pace outputs for different time durations (e.g., 400m, 1km, 5km, 10km).
Useful for tracking running fitness and race predictions. Can use Grade Adjusted Pace (GAP) to normalize for hills.
Args: days_back: Number of days to analyze (overrides time_period) time_period: Time period shorthand - 'week' (7 days), 'month' (30 days), 'year' (365 days), 'all' (all time). Default is 90 days. use_gap: Use Grade Adjusted Pace (GAP) for running to account for hills
Returns: JSON string with pace curve data
Inputs: use_gap, days_back, time_period. Returns: result
get_pace_histogramA
Get pace distribution histogram for an activity.
Analyzes how pace was distributed across the activity, showing time spent at different pace levels. Useful for running activities to understand pace distribution and consistency.
Args: activity_id: The unique ID of the activity
Returns: JSON string with pace distribution bins
Inputs: activity_id (required). Returns: result
get_power_curvesA
Get power curve data showing best efforts for various durations.
Analyzes power data across activities to find peak power outputs for different time durations (e.g., 5 seconds, 1 minute, 5 minutes, 20 minutes).
Useful for tracking performance improvements and identifying strengths/weaknesses across different power duration profiles.
Args: days_back: Number of days to analyze (overrides time_period) time_period: Time period shorthand - 'week' (7 days), 'month' (30 days), 'year' (365 days), 'all' (all time). Default is 90 days.
Returns: JSON string with power curve data
Inputs: days_back, time_period. Returns: result
get_power_histogramA
Get power distribution histogram for an activity.
Analyzes how power was distributed across the activity, showing time spent at different power levels. Useful for understanding workout intensity distribution and identifying training zones.
Args: activity_id: The unique ID of the activity
Returns: JSON string with power distribution bins
Inputs: activity_id (required). Returns: result
get_recent_activitiesA
Get recent activities for the authenticated athlete.
Returns a summary of recent activities including key metrics like distance, duration, power, heart rate, and training load.
Args: limit: Number of activities to fetch (default 30, max 100) days_back: Number of days to look back (default 30)
Returns: JSON string with activity summaries
Inputs: limit, days_back. Returns: result
get_sport_settingsA
Get all sport-specific settings (FTP, FTHR, pace thresholds, zones).
Returns: Formatted list of sport settings with thresholds and zones
Inputs: no named parameters. Returns: result
get_upcoming_workoutsA
Get upcoming planned workouts from the calendar.
Returns only workout events (filters out notes, races, goals) for the upcoming days. Useful for seeing what training is planned ahead.
Args: limit: Maximum number of workouts to return (default 7)
Returns: JSON string with upcoming workouts
Inputs: limit. Returns: result
get_wellness_dataB
Get wellness data for recent days.
Returns wellness metrics including HRV, sleep, resting heart rate, mood, fatigue, soreness, and other health markers.
Args: days_back: Number of days to retrieve (default 7)
Returns: JSON string with wellness data
Inputs: days_back. Returns: result
get_wellness_for_dateA
Get wellness data for a specific date.
Returns all wellness metrics for the specified date including sleep, HRV, heart rate, mood, fatigue, and other health markers.
Args: date: Date in ISO-8601 format (YYYY-MM-DD)
Returns: JSON string with wellness data for the date
Inputs: date (required). Returns: result
get_workout_libraryA
Get workout library folders and training plans.
Returns all workout folders and training plans available to you, including your personal workouts, shared workouts, and any training plans you follow.
Each folder contains structured workouts that can be applied to your calendar.
Returns: JSON string with workout folders/plans
Inputs: no named parameters. Returns: result
get_workouts_in_folderA
Get all workouts in a specific folder or training plan.
Returns detailed information about all workouts stored in a folder, including their structure, intensity, and training load.
Args: folder_id: ID of the folder to browse
Returns: JSON string with workout details
Inputs: folder_id (required). Returns: result
search_activitiesA
Search for activities by name or tag.
Searches the athlete's activity history for matching activities based on name or tags. Useful for finding specific workouts or activity types.
Args: query: Search term (e.g., "threshold", "long run", "race") limit: Maximum number of results (default 30)
Returns: JSON string with matching activities
Inputs: query (required), limit. Returns: result
search_activities_fullA
Search for activities by name or tag, returning complete activity details.
Unlike the basic search, this returns full Activity objects with all metrics, power data, heart rate, training load, and more. Use this when you need detailed information about matching activities.
Args: query: Search term (e.g., "threshold", "long run", "race", "#interval") limit: Maximum number of results (default 30)
Returns: JSON string with complete activity details for matches
Inputs: query (required), limit. Returns: result
search_intervalsA
Search for similar intervals across all activities.
Finds intervals matching specific criteria across your activity history. Useful for tracking progress on specific workout types or finding comparable training sessions.
Args: interval_type: Type of interval (e.g., "WORK", "THRESHOLD", "VO2MAX") min_duration: Minimum interval duration in seconds max_duration: Maximum interval duration in seconds limit: Maximum number of results to return (default 30)
Returns: JSON string with matching intervals
Inputs: limit, max_duration, min_duration, interval_type. Returns: result
update_activityA
Update an existing activity's metadata.
Modifies one or more fields of an existing activity. Only provide the fields you want to change - other fields will remain unchanged.
Args: activity_id: The unique ID of the activity to update name: New name for the activity description: New description/notes for the activity activity_type: New activity type (e.g., "Ride", "Run", "Swim") trainer: Whether this was an indoor trainer workout commute: Whether this was a commute feel: Subjective feel rating (1=terrible, 5=great) perceived_exertion: RPE rating (1-10 scale)
Returns: JSON string with updated activity information
Inputs: activity_id (required), feel, name, commute, +4 more. Returns: result
update_eventA
Update an existing calendar event.
Modifies one or more fields of an existing event. Only provide the fields you want to change - other fields will remain unchanged.
Args: event_id: ID of the event to update name: New name for the event description: New description start_date: New start date in YYYY-MM-DD format event_type: New activity type duration_seconds: New planned duration distance_meters: New planned distance training_load: New planned training load
Returns: JSON string with updated event data
Inputs: event_id (required), name, event_type, start_date, +4 more. Returns: result
update_gearA
Update an existing gear item.
Args: gear_id: ID of the gear item to update name: Updated name (optional) gear_type: Updated type (optional) brand: Updated brand (optional) model: Updated model (optional) active: Updated active status (optional) primary: Updated primary status (optional)
Returns: Updated gear item details
Inputs: gear_id (required), name, brand, model, +3 more. Returns: result
update_gear_reminderB
Update an existing gear maintenance reminder.
Args: gear_id: ID of the gear item reminder_id: ID of the reminder to update text: Updated reminder text (optional) distance_alert: Updated distance alert in kilometers (optional) time_alert: Updated time alert in hours (optional)
Returns: Updated reminder details
Inputs: gear_id (required), reminder_id (required), text, time_alert, +1 more. Returns: result
update_sport_settingsB
Update sport-specific settings (FTP, FTHR, pace thresholds).
Args: sport_id: ID of the sport settings to update ftp: Functional Threshold Power in watts (optional) fthr: Functional Threshold Heart Rate in bpm (optional) pace_threshold: Threshold pace in min/km (optional) swim_threshold: Swim threshold in min/100m (optional)
Returns: Updated sport settings
Inputs: sport_id (required), ftp, fthr, pace_threshold, +1 more. Returns: result
update_wellnessA
Update wellness data for a specific date.
Updates wellness metrics for the specified date. If a record doesn't exist for that date, it will be created. Only provide the fields you want to update.
All subjective metrics (fatigue, soreness, stress, mood, motivation) use a 1-5 scale: 1 = Very low/poor, 3 = Normal/moderate, 5 = Very high/excellent
Args: date: Date in ISO-8601 format (YYYY-MM-DD) weight: Weight in kilograms resting_hr: Resting heart rate in beats per minute hrv: Heart rate variability (rMSSD) in milliseconds sleep_secs: Sleep duration in seconds sleep_quality: Sleep quality rating (1-5) fatigue: Fatigue level (1-5) soreness: Muscle soreness level (1-5) stress: Stress level (1-5) mood: Mood rating (1-5) motivation: Motivation level (1-5) readiness: Overall readiness score (0-100) comments: Any notes or comments about the day
Returns: JSON string with updated wellness data
Inputs: date (required), hrv, mood, stress, +9 more. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 48 tools
Most tools have clearly distinct purposes, but search_activities and search_activities_full are near-duplicates differing only in response detail. Similarly, get_calendar_events and get_upcoming_workouts overlap somewhat, though descriptions mitigate ambiguity.
All tools follow a consistent verb_noun snake_case pattern (e.g., get_activity_details, create_event, delete_gear). Minor singular/plural deviations like get_workout_library vs get_workouts_in_folder do not undermine predictability.
With 48 tools, the surface far exceeds the typical 3-15 range. Many tools could be consolidated (e.g., histograms, search variants, bulk operations), making the set feel bloated and overwhelming for agents.
Core activity and calendar management are well covered, but there are notable gaps: no activity upload, no delete for gear reminders, no single-gear retrieval, and no workout creation/editing. Some CRUD cycles are incomplete.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Adaptive running coach MCP server — training data, plans, and recovery for AI assistants.
Connect Intervals.icu to Claude and ChatGPT: read training, plan workouts. Training never stored.
Connect Claude to your Intervals.icu watch data for fitness, workout review, and plan writing.
Related MCP Servers
- AlicenseAqualityAmaintenanceA Model Context Protocol (MCP) server that fetches sleep, HRV, and training data from the unofficial Coros API and exposes them to AI assistants like Claude, enabling natural language queries about fitness metrics and workout management.26125MIT
- AlicenseAqualityCmaintenanceA Model Context Protocol (MCP) server for Garmin Connect integration. Access your activities, health data, training metrics, and more through Claude and other LLMs.2268MIT
- AlicenseBqualityDmaintenanceA self-hosted, multi-tenant MCP server that exposes the Intervals.icu API—activities, events, wellness, power curves, gear, and custom items—as MCP tools for Claude.32GPL 3.0
- AlicenseAqualityCmaintenanceMCP server for Intervals.icu that enables AI assistants to manage athletic training data, including activities, calendar events, wellness metrics, and workout libraries.19Apache 2.0