Pre-alpha · v0.1 in progress

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.

Why icuvisor

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.
Privacy

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.

Open source & free

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.

Install

Download and install.

Pick the build for your platform — icuvisor v0.0.1.

Read the full quickstart → · Release notes

Tool catalog

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.
Documentation

Find what you need.

Compatible clients

Works where you already work.

  • Claude Desktop & Claude Code
  • ChatGPT (custom MCP)
  • Cursor, Continue, Zed
  • Pi, and any other MCP-compatible client
Roadmap

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.

Read the roadmap →