Talk to your intervals.icu data.
icuvisor is an open-source MCP server for intervals.icu, shipped as a single signed Go binary. Connect Claude, ChatGPT, Cursor, Pi, or Zed to your training data — locally, privately, free.
Your training data, in any AI assistant.
Ask follow-up questions about last week's threshold workout. Get a plain-English summary of your form trend. Plan an event from your calendar. icuvisor exposes intervals.icu through a clean MCP catalog so the assistant you already use can read and reason over your data.
- Single signed binary for macOS, Windows, and Linux — no Python, no Docker.
- Terse-by-default responses tuned for LLM context windows. Heavy payloads are opt-in.
- Generated MCP tool catalog covering activities, wellness, fitness, events, and custom items.
- Coach mode for working across a roster of athletes from one install.
- stdio & Streamable HTTP transports for every major MCP client.
Local-first by design.
Your API key lives in the OS keychain — never on disk in plain text, never in a tool argument, never on someone else's server. The HTTP transport binds to 127.0.0.1 by default.
No subscription. No lock-in.
Free forever, with no account to create and nothing to upgrade. The code is open so you can see exactly what runs on your machine — and the community can keep it alive long after any single maintainer.
Download and install.
Pick the build for your platform — icuvisor v0.0.1.
- icuvisor_0.0.1_linux_amd64.tar.gz — 4.0 MB
- icuvisor_0.0.1_linux_arm64.tar.gz — 3.6 MB
- icuvisor_0.0.1_macos_universal.dmg — 9.8 MB
- icuvisor_0.0.1_windows_amd64.msi — 3.5 MB
- icuvisor_0.0.1_windows_amd64.zip — 3.9 MB
- icuvisor_0.0.1_windows_arm64.msi — 3.2 MB
- icuvisor_0.0.1_windows_arm64.zip — 3.5 MB
Everything your AI assistant can do.
The full set of MCP tools icuvisor exposes, grouped by area. See the tool reference for arguments and response shapes.
Activities
add_activity_message- Append a non-destructive comment/message to one activity when write tools are enabled.
delete_activity- Delete one activity by activity_id.
get_activities- List activities for a date range with terse unit-disambiguated rows, Strava-unavailable detection, and opaque pagination.
get_activity_details- Get one activity's terse metadata and metrics by activity_id.
get_activity_intervals- Get analyzed intervals for one activity by activity_id.
get_activity_messages- List comments and notes on one activity by activity_id.
get_activity_splits- Get manual or virtual per-km/per-mile activity splits.
get_activity_streams- Get canonical activity stream channels by activity_id.
get_extended_metrics- Get one activity's upstream-exposed extended metrics by activity_id.
Workout library
apply_training_plan- Apply a workout-library training plan to the athlete calendar from an anchor start date.
create_workout- Create a reusable workout-library template, not a calendar event.
delete_workout- Delete one reusable workout-library template by workout_id.
get_training_plan- Fetch the athlete's active training-plan assignment, not calendar events or workout-library templates.
get_workout_library- List workout-library folders and plans, not calendar events or the active training-plan assignment.
get_workouts_in_folder- List workout-library templates inside one folder or plan by folder_id.
update_workout- Update one reusable workout-library template by workout_id with sparse fields only.
Events & calendar
add_or_update_event- Create or update a non-destructive calendar event such as a planned workout, race, or note.
delete_event- Delete one calendar event by event_id.
delete_events_by_date_range- Delete calendar events in a required athlete-local YYYY-MM-DD start_date/end_date range, optionally filtered by category.
get_event_by_id- Fetch a single calendar event detail by event_id.
get_events- List calendar events across a bounded athlete-local YYYY-MM-DD date range.
link_activity_to_event- Manually pair one completed activity with one planned calendar event when intervals.icu auto-pairing misses (forum #97).
Fitness metrics
get_best_efforts- Get upstream best efforts grouped by sport and default/requested power, heart-rate, and pace buckets.
get_fitness- Get CTL, ATL, and TSB fitness trends for a local date range.
get_power_curves- Get the upstream-computed mean-maximal power curve for a date range.
get_training_summary- Get aggregated training volume, neutral training load, sRPE, and upstream zone-order totals for a local date range.
Wellness
get_wellness_data- Get daily wellness rows for a local date range with distinct sleepQuality, sleepScore, sleepSecs, custom fields, and native provider sidecars.
update_wellness- Update one athlete-local wellness row with sparse manual fields: subjective scales, measurements, injury text, and locked; legacy feel remains in the input schema for compatibility but rejects with field_not_writable: feel (not accepted by intervals.icu wellness write), device-owned sleepScore rejects with field_not_writable: sleepScore (device-managed), and _native rejects with field_not_writable: _native (bridge-managed).
Custom items
create_custom_item- Create one custom item definition.
delete_custom_item- Delete one custom item definition by item_id.
get_custom_item_by_id- Fetch one custom item by item_id and preserve its full content payload.
get_custom_items- List custom item definitions such as charts, fields, streams, panels, histograms, maps, and zones.
update_custom_item- Update one custom item definition by item_id with sparse fields only.
Sport settings
delete_gear- Delete one gear item by gear_id.
delete_sport_settings- Delete one sport-settings definition by sport_settings_id.
get_athlete_profile- Get the configured athlete profile, FTP/thresholds, zones, and sport settings from intervals.icu.
update_sport_settings- Update one sport's FTP, threshold heart rate, threshold pace, or zone definitions.
Coach mode
list_athletes- List the coach-mode roster configured for this icuvisor server.
select_athlete- Select the default target athlete for subsequent coach-mode tool calls in this MCP session.
Server
icuvisor_list_advanced_capabilities- Discover tools hidden from the default core catalog and explain how to enable the full icuvisor toolset.
Find what you need.
Tutorials
Step-by-step walkthroughs to get your first AI assistant talking to intervals.icu.
How-to guides
Task-focused recipes: get an API key, set up coach mode, expose HTTP, troubleshoot.
Reference
The tool catalog, CLI flags, config file, resources & prompts, and safety modes.
Explanations
What MCP is, why icuvisor is local-first, terse-by-default, and how coach mode works.
Connect a client
Per-client setup for Claude Desktop, Claude Code, ChatGPT, and others.
Install
Platform-specific install instructions for macOS, Windows, and Linux.
Works where you already work.
- Claude Desktop & Claude Code
- ChatGPT (custom MCP)
- Cursor, Continue, Zed
- Pi, and any other MCP-compatible client
Where we are.
icuvisor is pre-alpha. The walking-skeleton (v0.1) is in progress. v1.0 ships installers, the full tool catalog, and one-click client configs.