intervals-icu-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| INTERVALS_ICU_API_KEY | Yes | Your Intervals.icu API key | |
| INTERVALS_ICU_ATHLETE_ID | Yes | Your Intervals.icu athlete ID (format: i123456) |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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) |
| 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) |
| 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) |
| 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:
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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| get_fitness_summaryA | Get the athlete's current fitness, fatigue, and form metrics. Returns a comprehensive summary of training load metrics including:
Includes interpretations to help understand training status. Returns: JSON string with fitness summary and recommendations |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| get_sport_settingsA | Get all sport-specific settings (FTP, FTHR, pace thresholds, zones). Returns: Formatted list of sport settings with thresholds and zones |
| 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 |
| apply_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 |
| 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 |
| delete_sport_settingsB | Delete sport-specific settings. Args: sport_id: ID of the sport settings to delete Returns: Deletion confirmation |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| analyze_recent_training | Analyze my Intervals.icu training over a time period. Args: days: Number of days to analyze (e.g., "7", "30", "90") |
| performance_analysis | Analyze my performance across different durations. Args: metric: Performance metric to analyze ("power", "hr", or "pace") |
| activity_deep_dive | Get comprehensive analysis of a specific activity. Args: activity_id: The ID of the activity to analyze |
| recovery_check | Assess my current recovery and readiness to train. |
| training_plan_review | Review my upcoming training plan. |
| plan_training_week | Help plan my training week based on current form and goals. Args: goal: Training goal ("balanced", "build", "recover", "peak") |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| athlete_profile_resource | Complete athlete profile with fitness metrics and sport settings for context. |
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/eddmann/intervals-icu-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server