Tool reference

Tool reference

This reference is generated from the MCP tool registry. It lists every tool icuvisor registers, grouped by domain, with its toolset tier, safety gate, concise argument schema, and curated input examples where available. Tool names are stable; the color key marks each tool as a read, create, update, or delete operation.

For background on how particular tools behave — how fitness projection is modelled, what interval data really represents, how calendar notes work — see Explanation.

Color key read create update delete

Activities

ToolSummary and inputsTierSafety
add_activity_message

Append a non-destructive comment/message to one activity when write tools are enabled.

Arguments (3)
activity_id required string

Required intervals.icu activity ID to append a message/comment to. Surrounding whitespace is trimmed.

include_full optional boolean

When true, include the raw upstream add-message response under full; default returns a terse append confirmation.

default: false

message required string

Required free-text message/comment content. Must be non-empty after trimming; the body is sent as content and is not logged by icuvisor.

corewrite
delete_activity

Delete one activity by activity_id.

Arguments (1)
activity_id required string

Required opaque upstream activity ID to delete. This destructive operation has no confirm argument; the tool is registered only when ICUVISOR_DELETE_MODE=full.

full toolsetdelete
get_activities

Scan an athlete-local date window and return a paginated activity index: terse unit-disambiguated summary rows with IDs, source/device hints, tags, explicitly requested custom_fields, and Strava-unavailable markers.

Arguments (8)
custom_fields optional array

Optional athlete-defined activity custom field codes to fetch and expose under custom_fields; defaults to none to keep terse responses small.

items: string

include_full optional boolean

When true, include raw upstream activity fields and preserve upstream nulls; default terse rows are unit-disambiguated and null-stripped.

default: false

include_unnamed optional boolean

When false, drop rows with an empty activity name after bounded pagination.

default: false

newest optional string

Optional local ISO-8601 end date/date-time; defaults upstream to now.

next_page_token optional string

Opaque token from _meta.next_page_token for the next page. Do not edit.

oldest optional string

Required local ISO-8601 start date/date-time unless next_page_token is supplied.

page_size optional integer

Number of terse rows to return per page; values above 200 are capped.

default: 50

route_id optional integer

Optional intervals.icu route ID filter.

coreread
get_activities_around

Find activities recorded near or around a known reference activity_id without asking the model to invent a date window.

Arguments (3)
activity_id required string

Required intervals.icu reference activity ID. Use get_activities first if the prompt only describes the activity by date, name, or recent context.

include_full optional boolean

When true, include raw upstream activity fields and preserve upstream nulls; default terse rows are unit-disambiguated and null-stripped.

default: false

limit optional integer

Maximum number of nearby activities to return. Omitted defaults to 10; values outside 1..50 are rejected.

default: 10

coreread
get_activity_details

Get one activity's terse metadata and metrics by activity_id, including upstream activity tags when returned, calories_burned as active/exercise calories (distinct from wellness kcal_consumed), carbs_ingested_g for athlete-logged carb intake, carbs_used_g for upstream carbs-burned estimate, and explicitly requested athlete-defined custom_fields when upstream provides them.

Arguments (3)
activity_id required string

intervals.icu activity ID.

custom_fields optional array

Optional athlete-defined activity custom field codes to expose under custom_fields; defaults to none to keep terse responses small.

items: string

include_full optional boolean

Include raw upstream fields; default terse mode strips nulls and returns normalized fields.

default: false

coreread
get_activity_histogram

Use when the prompt asks for a single activity's power, heart-rate, or pace distribution; do not fetch get_activity_streams samples and bin them in chat.

Arguments (3)
activity_id required string

Required intervals.icu activity ID whose stream distribution should be summarized.

include_full optional boolean

When true, preserve diagnostic metadata. Raw stream samples are never returned by this histogram tool.

default: false

metric required string

Histogram metric enum for a single activity; schemas enumerate canonical values only. Safe aliases such as power, hr, heart_rate, and pace are accepted by the server.

enum: heart_rate_bpm, pace_seconds_per_km, power_watts

full toolsetread
get_activity_intervals

Get analyzed intervals for one activity by activity_id, including scalar custom interval fields such as lactate under custom_fields when upstream includes them.

Arguments (2)
activity_id required string

intervals.icu activity ID.

include_full optional boolean

Include raw upstream fields; default terse mode strips nulls and returns normalized fields.

default: false

coreread
get_activity_messages

List comments and notes on one activity by activity_id.

Arguments (4)
activity_id required string

intervals.icu activity ID whose messages/comments should be listed.

include_full optional boolean

Include raw upstream message fields and preserve nulls.

default: false

limit optional integer

Maximum messages to return; defaults to 100 and is capped at 200.

default: 100

since_id optional integer

Return messages after this upstream message ID; zero means no cursor.

coreread
get_activity_splits

Get manual or virtual per-km/per-mile activity splits by activity_id.

Arguments (3)
activity_id required string

Required intervals.icu activity ID whose manual or virtual splits should be returned.

include_full optional boolean

When true, preserve full response metadata during shaping; split rows remain terse and unit-disambiguated by default.

default: false

split_unit optional string

Optional split distance unit. Defaults to the athlete's preferred_units when omitted, falling back to km.

enum: km, mi

coreread
get_activity_streams

Get canonical activity stream channels by activity_id.

Arguments (3)
activity_id required string

Required intervals.icu activity ID whose stream channels should be listed.

include_full optional boolean

When true, include raw upstream stream payloads and samples for available stream channels; default returns metadata only unless keys is supplied.

default: false

keys optional array

Optional stream keys to include as samples. Values are canonicalized to snake_case when known; unknown keys are reported in _meta. Supplying keys includes samples even when include_full is false.

items: string

full toolsetread
get_extended_metrics

Get one activity's upstream-exposed extended metrics by activity_id.

Arguments (2)
activity_id required string

Intervals.icu activity ID to fetch extended metrics for.

include_full optional boolean

When true, include raw upstream activity, interval, and power-vs-HR payloads. Default terse mode only returns upstream-exposed metrics and drops unavailable fields.

default: false

full toolsetread
set_activity_intervals

Set or correct the interval structure on one completed activity by writing a structured workout_doc as the activity's description; intervals.icu re-parses the DSL into rendered intervals overlaid on the recording.

Arguments (4)
activity_id required string

Required intervals.icu activity ID whose interval structure will be (re)written. Surrounding whitespace is trimmed; the i-prefix is preserved verbatim.

include_full optional boolean

When true, include the raw upstream updated-activity payload under full; default returns a terse confirmation.

default: false

prose optional string

Optional free-text prose to interleave around the serialized steps; the upstream description retains the prose verbatim around the DSL block. Use the <!-- icuvisor:steps --> sentinel on its own line to choose where serialized steps are inserted. Omit to send the serialized DSL alone.

workout_doc required object

Required structured WorkoutDoc whose steps are serialized to the activity description DSL; intervals.icu re-parses the DSL into rendered intervals. Must contain at least one step. In each structured step, description is a label/comment only: do not include duration or distance tokens there; use duration seconds or distance instead. Syntax reference: icuvisor://workout-syntax. Call validate_workout first if uncertain about the DSL.

additional properties: allowed

full toolsetdelete
update_activity

Rename and/or replace the free-text description of one completed activity by activity_id.

Arguments (4)
activity_id required string

Required intervals.icu activity ID. Surrounding whitespace is trimmed; the i-prefix is preserved verbatim.

description optional string

Optional replacement free-text activity description; this is not append-only. Omit to leave unchanged; pass an explicit empty string to clear the description. Prose metadata only — to write structured intervals, use set_activity_intervals with a workout_doc.

include_full optional boolean

When true, include the raw upstream updated-activity payload under full; default returns a terse update confirmation.

default: false

name optional string

Optional replacement activity title. Omit to leave unchanged. Empty strings are rejected to avoid accidentally blanking the title; intervals.icu's UI also rejects blank titles.

corewrite

Workout library

ToolSummary and inputsTierSafety
apply_training_plan

Apply a workout-library training plan to the athlete calendar from an anchor start date.

Arguments (4)
conflict_policy optional string

skip_existing leaves days with calendar conflicts untouched. replace_existing deletes only pure same-day WORKOUT conflicts before creating plan workouts and is accepted only when ICUVISOR_DELETE_MODE=full; days with protected conflicts such as duplicate workouts, races, notes, holidays, sick/injured blocks, or unknown non-workout categories are skipped and reported.

enum: skip_existing, replace_existing default: "skip_existing"

dry_run optional boolean

Safety default is true, even in safe mode. Set dry_run:false explicitly to create or replace calendar events.

default: true

plan_id required string

Required workout-library folder/plan ID to fetch server-side. Do not pass plan contents in tool arguments.

start_date required string

Required athlete-local YYYY-MM-DD anchor date; workout day 1 is applied to this date and later plan days are relative to it.

Input examples (2)
{"plan_id":"plan-base-8","start_date":"2026-07-06"}
{"conflict_policy":"skip_existing","dry_run":true,"plan_id":"plan-build-12","start_date":"2026-08-03"}
full toolsetwrite
create_workout

Create a reusable workout-library template, not a calendar event.

Arguments (6)
description optional string

Optional free-text prose for the initial upstream workout description/DSL. This is part of the single upstream description/DSL field, not separate append-only notes. Preserved verbatim. May be supplied with workout_doc; use the <!-- icuvisor:steps --> sentinel on its own line to choose where serialized steps are inserted.

folder_id required string

Required intervals.icu workout-library folder ID. Must identify an existing folder owned by the athlete; top-level workout creates are refused upstream.

name required string

Required workout-library template name/title. Surrounding whitespace is trimmed.

sport required string

Required upstream sport/activity type for the workout template, such as Ride, Run, Swim, VirtualRide, or the athlete account's configured activity type. Used with athlete sport settings to disambiguate structured workout_doc zone targets.

tags optional array

Optional workout-library tags to preserve on the upstream template, in caller-provided order.

items: string

workout_doc optional object

Optional structured WorkoutDoc for the initial upstream workout description/DSL. Serialized and merged with description when both are supplied. In each structured step, description is a label/comment only: do not include duration or distance tokens there; use duration seconds or distance instead. Zone targets are serialized using the supplied sport and the athlete's sport settings, adding metric suffixes such as Z2 Power, Z2 HR, or Z2 Pace when needed. Syntax reference: icuvisor://workout-syntax.

additional properties: allowed

Input examples (2)
{"description":"60m easy aerobic endurance. Keep it conversational.","folder_id":"folder-ride-1","name":"Endurance aerobic ride","sport":"Ride"}
{"folder_id":"folder-build-1","name":"Threshold builder","sport":"Ride","tags":["threshold","build"],"workout_doc":{"steps":[{"description":"Warm up","duration":900,"power":{"units":"PERCENT_FTP","value":60}},{"description":"Threshold","duration":1200,"power":{"max":100,"min":95,"units":"PERCENT_FTP"}},{"description":"Cool down","duration":600,"power":{"units":"PERCENT_FTP","value":50}}]}}
full toolsetwrite
delete_workout

Delete one reusable workout-library template by workout_id.

Arguments (1)
workout_id required string

Required upstream workout-library template ID to delete. This destructive operation has no confirm argument; the tool is registered only when ICUVISOR_DELETE_MODE=full.

full toolsetdelete
get_annual_training_plan

Use when the prompt asks about annual training plan, season phase, weekly load/TSS targets, recovery weeks, taper context, or periodization summary; do not manually join raw get_events rows in chat.

Arguments (5)
calendar_id optional string

Optional upstream calendar ID filter when the athlete uses separate planning calendars.

include_full optional boolean

When true, include raw upstream PLAN/TARGET/NOTE event payloads only on the corresponding phase, target_event, and note rows. Default output is a compact summary.

default: false

limit optional integer

Maximum raw calendar events to scan before filtering PLAN/TARGET/NOTE periodization rows; defaults to 500 and values above 500 are capped.

default: 500

newest required string

Required athlete-local end date YYYY-MM-DD for the ATP/periodization event scan; must be on or after oldest.

oldest required string

Required athlete-local start date YYYY-MM-DD for the ATP/periodization event scan; range is capped at 366 days.

full toolsetread
get_planning_context

Fetch read-only weekly planning context without creating an ATP or calendar writes: athlete-local week events/workouts, active training-plan assignment summary, current fitness context, upcoming races, and caveats.

Arguments (2)
include_full optional boolean

When true, include raw source read payloads only: event full fields, fitness row full fields, and raw active training-plan assignment/nested payloads. This does not enable ATP creation or calendar writes.

default: false

week_start optional string

Optional athlete-local YYYY-MM-DD date anchoring the planning week. The supplied date is normalized backward to Monday; omit to use the upcoming athlete-local Monday, with today used when today is Monday.

full toolsetread
get_training_plan

Fetch the athlete's active training-plan assignment, not calendar events or workout-library templates.

Arguments (1)
include_full optional boolean

When true, include the raw upstream training-plan assignment and nested plan/workout payload. Default mode returns assignment fields and lightweight plan summary only.

default: false

full toolsetread
get_workout_library

List workout-library folders and plans, not calendar events or the active training-plan assignment.

Arguments (1)
include_top_level_workouts optional boolean

When true, also fetch all library workouts and include only those without a folder_id as top-level workout templates.

default: false

full toolsetread
get_workouts_in_folder

List workout-library templates inside one folder or plan by folder_id.

Arguments (2)
folder_id required string

Required intervals.icu workout-library folder or plan ID. The public API lists all workouts, and icuvisor filters by this folder_id.

include_full optional boolean

When true, include each raw upstream workout_doc object verbatim. Default mode returns only workout_doc_summary.

default: false

full toolsetread
update_workout

Update one reusable workout-library template by workout_id with sparse fields only.

Arguments (7)
description optional string

Optional replacement for the upstream workout description/DSL, not append-only notes. Omit to leave unchanged. Supplying description without workout_doc can replace existing structured steps; provide the desired workout_doc to preserve or merge structure. May be supplied with workout_doc; use the <!-- icuvisor:steps --> sentinel on its own line to choose where serialized steps are inserted. Empty strings without workout_doc are rejected to avoid accidentally clearing structured workout content.

folder_id optional string

Optional replacement intervals.icu workout-library folder or plan ID. Omit to leave unchanged; an explicit empty string moves the workout to the top level when upstream supports it.

name optional string

Optional replacement workout-library template name/title. Omit to leave unchanged.

sport optional string

Optional replacement upstream sport/activity type such as Ride, Run, Swim, or the athlete account's configured activity type. Omit to leave unchanged. Include with workout_doc when icuvisor should use athlete sport settings to disambiguate zone target suffixes.

tags optional array

Optional replacement workout-library tags. Omit to leave unchanged; provide the full desired tag list when appending a tag.

items: string

workout_doc optional object

Optional replacement structured WorkoutDoc for the upstream workout description/DSL. Serialized and merged with description when both are supplied; empty steps clear structured content. Include the desired steps when changing prose so the replacement description/DSL preserves workout structure. In each structured step, description is a label/comment only: do not include duration or distance tokens there; use duration seconds or distance instead. Include sport in the same request when zone targets should be serialized using athlete sport settings; otherwise workout_doc uses the no-sport serializer. Syntax reference: icuvisor://workout-syntax.

additional properties: allowed

workout_id required string

Required upstream workout-library template ID to update. Surrounding whitespace is trimmed.

Input examples (2)
{"name":"Endurance aerobic ride - revised","workout_id":"workout-example-7"}
{"workout_doc":{"steps":[{"description":"Warm up","duration":600,"power":{"units":"PERCENT_FTP","value":55}},{"description":"Tempo","duration":1800,"power":{"max":85,"min":80,"units":"PERCENT_FTP"}}]},"workout_id":"workout-example-8"}
full toolsetwrite
validate_workout

Validate an intervals.icu workout description, a structured workout_doc, or both, and return the canonical merged DSL plus estimated duration that icuvisor would submit on a write.

Arguments (2)
description optional string

Optional free-text intervals.icu description. Prose, headers, comments, and any line the DSL parser does not recognize as a structured step pass through verbatim. Embed the sentinel '<!-- icuvisor:steps -->' on its own line to control where structured steps from workout_doc are inserted in the merged canonical DSL. Structured-step lines start with '- ' or are 'Nx' repeat headers; dashed repeat-like lines such as '-3 x' are also validated so malformed repeat syntax surfaces as PARSE_ERROR. Syntax reference: icuvisor://workout-syntax.

workout_doc optional object

Optional structured WorkoutDoc with a steps[] array. Validated via the same Serialize path that write tools use. In each structured step, description is a label/comment only: do not include duration or distance tokens there; use duration seconds or distance instead. Mutually compatible with description; when both contain structured steps, workout_doc wins and the response surfaces a STEP_SOURCES_OVERRIDDEN warning.

additional properties: allowed

Input examples (2)
{"description":"Easy Zone 2 spin.\n- 60m 60-70% HR"}
{"description":"Threshold day. Keep cadence above 85.\n\u003c!-- icuvisor:steps --\u003e\nCool down well.","workout_doc":{"steps":[{"description":"Warm up","duration":600,"power":{"units":"PERCENT_FTP","value":60}},{"reps":3,"steps":[{"duration":480,"power":{"max":100,"min":95,"units":"PERCENT_FTP"}},{"description":"Recovery","duration":240,"power":{"units":"PERCENT_FTP","value":50}}]},{"description":"Cool down","duration":600,"power":{"units":"PERCENT_FTP","value":50}}]}}
coreread

Events & calendar

ToolSummary and inputsTierSafety
add_or_update_event

Create or update a non-destructive calendar event such as a planned workout, race, or note.

Arguments (15)
category required string

Required upstream event category. Documented upstream categories include WORKOUT, RACE_A, RACE_B, RACE_C, NOTE, PLAN, HOLIDAY, SICK, INJURED, SET_EFTP, FITNESS_DAYS, SEASON_START, TARGET, SET_FITNESS; see icuvisor://event-categories. Custom athlete/account category values are passed through.

date required string

Required athlete-local event date as YYYY-MM-DD; interpreted in the configured athlete timezone.

description optional string

Optional replacement for the upstream event description/DSL, not append-only notes. Omit on updates to leave unchanged. For WORKOUT updates, supplying description without workout_doc can replace existing structured steps; include the desired workout_doc to preserve or merge structure. Preserved verbatim, including whitespace and line breaks. May be supplied with workout_doc; use the <!-- icuvisor:steps --> sentinel on its own line to choose where serialized steps are inserted.

distance_meters optional number

Optional planned distance in meters when supported upstream.

elapsed_time_seconds optional integer

Optional planned elapsed duration in seconds when supported upstream.

event_id optional string

Optional upstream event ID to update. Omit to create a new event; this tool never deletes events.

external_id optional string

Optional non-empty upstream idempotency key. Surrounding whitespace is trimmed; omit or pass blank to leave external_id unchanged/unset. Clearing an existing upstream external_id is not supported.

include_full optional boolean

When true, include the raw upstream event payload under event.full; default response matches get_event_by_id's terse event shape.

default: false

indoor optional boolean

Optional planned-event indoor/trainer flag. Set true for indoor trainer rides; commonly paired with type VirtualRide, but this boolean controls intervals.icu's Indoor toggle.

moving_time_seconds optional integer

Optional planned moving duration in seconds when supported upstream.

name optional string

Event title/name shown on the athlete calendar. Required when creating NOTE events; optional for other supported writes and updates unless upstream requires it.

tags optional array

Optional replacement event tags, in caller-provided order. Omit to leave unchanged on updates; provide [] to clear all tags.

items: string

target_load optional number

Optional planned training load / TSS equivalent when supported upstream.

type optional string

Required for WORKOUT events: upstream sport/activity type such as Ride, Run, Swim, or the athlete account's configured activity type. Surrounding whitespace is trimmed. Used with athlete sport settings to disambiguate structured workout_doc zone targets.

workout_doc optional object

Optional structured WorkoutDoc. Serialized to the upstream workout DSL and merged with description when both are supplied. For WORKOUT updates, include the desired structured steps when changing prose so the replacement description/DSL preserves the workout structure. In each structured step, description is a label/comment only: do not include duration or distance tokens there; use duration seconds or distance instead. Zone targets are serialized using the WORKOUT type and athlete sport settings, adding metric suffixes such as Z2 Power, Z2 HR, or Z2 Pace when needed. Syntax reference: icuvisor://workout-syntax.

additional properties: allowed

Input examples (2)
{"category":"NOTE","date":"2026-06-12","description":"Breakfast: oatmeal and banana. Lunch: rice bowl. Carry 90 g carbs/hour for the long ride.","name":"Race-week nutrition plan"}
{"category":"NOTE","date":"2026-06-15","description":"Flight lands at 14:20. Pack pedals, charger, spare cleats, bottles, and race license.","name":"Travel logistics"}
corewrite
add_unavailable_date_range

Create unavailable calendar markers across an inclusive athlete-local date range for Sick, Injured, or Holiday/time-off blocks.

Arguments (6)
category required string

Closed unavailable category or alias. Accepted canonical values are HOLIDAY, SICK, and INJURED; time-off aliases normalize to HOLIDAY.

enum: HOLIDAY, SICK, INJURED, HOLIDAYS, VACATION, PTO, TIME_OFF, TIME OFF, ILL, ILLNESS, SICKNESS, INJURY

description optional string

Optional replacement event description written to each per-day unavailable marker.

end_date required string

Required athlete-local inclusive end date as YYYY-MM-DD; same-day ranges are allowed and ranges are capped at 31 days.

include_full optional boolean

When true, include raw upstream event payloads under each returned event.full; default response uses terse event rows.

default: false

name optional string

Optional event title/name. Defaults to Holiday, Sick, or Injured after category normalization; surrounding whitespace is trimmed.

start_date required string

Required athlete-local inclusive start date as YYYY-MM-DD.

Input examples (2)
{"category":"HOLIDAY","description":"Family holiday; no training.","end_date":"2026-07-03","start_date":"2026-07-01"}
{"category":"SICK","description":"Flu symptoms; rest only.","end_date":"2026-08-11","start_date":"2026-08-10"}
corewrite
delete_event

Delete one calendar event by event_id.

Arguments (1)
event_id required string

Required opaque upstream event ID to delete. This destructive operation has no confirm argument; the tool is registered only when ICUVISOR_DELETE_MODE=full.

full toolsetdelete
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.

Arguments (3)
category optional string

Optional upstream event category filter. Omit to delete all event categories in the bounded date range.

end_date required string

Required athlete-local end date YYYY-MM-DD. Same-day ranges are allowed; range size is capped at 31 inclusive days.

start_date required string

Required athlete-local start date YYYY-MM-DD. Open-ended ranges are rejected.

full toolsetdelete
get_event_by_id

Fetch a single calendar event detail by event_id.

Arguments (6)
date optional string

Optional athlete-local YYYY-MM-DD date hint. On detail 404, scans ±30 days around this date.

event_id required string

Required upstream event ID. Numeric upstream IDs should be passed as strings.

include_full optional boolean

When true, include the raw upstream event payload under event.full; default response is terse.

default: false

newest optional string

Optional athlete-local scan end YYYY-MM-DD. Must be paired with oldest and span at most 61 days.

oldest optional string

Optional athlete-local scan start YYYY-MM-DD. Must be paired with newest and span at most 61 days.

resolve optional boolean

Optional upstream resolve flag for the fallback list scan; defaults to true to recover recurring or derived event instances.

coreread
get_events

List calendar events across a bounded athlete-local YYYY-MM-DD date range.

Arguments (7)
calendar_id optional string

Optional upstream calendar ID filter.

category optional string

Optional upstream event category filter. Documented upstream categories include WORKOUT, RACE_A, RACE_B, RACE_C, NOTE, PLAN, HOLIDAY, SICK, INJURED, SET_EFTP, FITNESS_DAYS, SEASON_START, TARGET, SET_FITNESS; see icuvisor://event-categories. Custom athlete/account category values are passed through.

include_full optional boolean

When true, include each raw upstream event payload under full; default rows are terse and null-stripped.

default: false

limit optional integer

Maximum event rows to request; defaults to 100 and values above 500 are capped.

default: 100

newest required string

Required athlete-local end date YYYY-MM-DD; date range is capped at 366 days.

oldest required string

Required athlete-local start date YYYY-MM-DD.

resolve optional boolean

Optional upstream resolve flag for recurring/derived events when supported by intervals.icu.

coreread
resolve_calendar_dates

Resolve athlete-local calendar anchors before planning, scheduling, or answering date-sensitive prompts such as today, tomorrow, next week, or N days from today.

Arguments (2)
base_date optional string

Optional athlete-local YYYY-MM-DD base date. Defaults to today's date from the athlete timezone, not UTC or the chat client's timezone.

offsets optional array

Integer day offsets from base_date. 0 is the base date, 1 is tomorrow, 7 is one week later, and negative values look backward. Each date is computed in the athlete timezone with calendar-day arithmetic.

default: [0] items: integer

coreread

Fitness metrics

ToolSummary and inputsTierSafety
get_best_efforts

Get upstream best efforts grouped by sport and default/requested power, heart-rate, and pace buckets.

Arguments (6)
distance_meters optional array

Pace distance buckets. Defaults depend on sport: run-style 400,1000,1609,5000,10000m; swim 50,100,200,400,1500m.

items: integer

duration_seconds optional array

Power/HR duration buckets. Defaults to 5,15,30,60,300,1200,3600 seconds.

items: integer

include_full optional boolean

When true, include raw upstream curve arrays and activity maps.

default: false

newest optional string

Optional local end date YYYY-MM-DD. Supply with oldest or omit both for all-time.

oldest optional string

Optional local start date YYYY-MM-DD. Supply with newest or omit both for all-time.

sports optional array

Intervals.icu sports/types to fan out. Defaults to Ride, Run, Swim.

items: string

coreread
get_fitness

Get CTL, ATL, and TSB fitness trends for a local date range.

Arguments (4)
end_date required string

local end date as YYYY-MM-DD in the athlete timezone.

include_full optional boolean

When true, include raw upstream summary rows.

default: false

include_per_sport_load_trends optional boolean

When true, include computed per-sport CTL/ATL/TSB-style load trend estimates for running, cycling, swimming, and other from athlete-summary byCategory training_load. Existing combined fitness rows remain unchanged.

default: false

start_date required string

local start date for fitness rows as YYYY-MM-DD in the athlete timezone.

coreread
get_fitness_projection

Use when the prompt asks to project CTL, ATL, or TSB forward; do not fetch get_fitness rows and model the curve in chat.

Arguments (10)
horizon_date optional string

Optional athlete-local YYYY-MM-DD end date; provide either horizon_date or horizon_days, not both.

horizon_days optional integer

Optional number of days after start_date to simulate.

default: 42

include_full optional boolean

When true, include the projected daily CTL/ATL/TSB curve series.

default: false

model optional string

Closed enum. Free-form physiology models are rejected; this tool only supports deterministic CTL/ATL/TSB impulse-response projection.

enum: deterministic_ctl_atl_tsb default: "deterministic_ctl_atl_tsb"

planned_daily_loads optional array

Optional explicit planned training load values by athlete-local date; these replace modeled ramp load or weekly_plan_targets load for matching dates.

items: object

recovery_week_cadence optional integer

Every Nth week uses recovery_week_load_pct of modeled load; use 0 to disable recovery weeks.

default: 4

recovery_week_load_pct optional number

Percent of modeled load used during recovery weeks.

default: 60

start_date required string

Athlete-local YYYY-MM-DD date whose get_fitness CTL/ATL/TSB values seed the projection.

weekly_plan_targets optional array

Optional weekly training-load/TSS targets copied from get_training_plan or planning context. Each ISO Monday week_start_date is distributed evenly as training_load/7 across projected future dates in that week; partial weeks are not reweighted and planned_daily_loads override exact dates.

items: object

weekly_ramp_pct optional number

Week-over-week percent change applied to modeled daily load when planned_daily_loads does not specify a day.

default: 5

full toolsetread
get_hr_curves

Get upstream-computed heart-rate best-effort curves for a date range.

Arguments (5)
duration_seconds optional array

Heart-rate curve duration buckets in seconds. Defaults to 5,15,30,60,300,1200,3600 seconds; point values are heart_rate_bpm.

items: integer

include_full optional boolean

When true, include raw upstream curve arrays and activity maps.

default: false

newest required string

Local end date YYYY-MM-DD.

oldest required string

Local start date YYYY-MM-DD.

sport optional string

Optional intervals.icu sport/type filter for the upstream type parameter. Omit to let upstream aggregate its default heart-rate curve set.

full toolsetread
get_pace_curves

Get upstream-computed pace best-effort curves for a date range.

Arguments (5)
distance_meters optional array

Pace curve distance buckets in meters. Defaults to 400,1000,1609,5000,10000m, or swim-style 50,100,200,400,1500m when sport contains Swim. Points include upstream elapsed_seconds plus either pace_seconds_per_km or pace_seconds_per_mile based on athlete units.

items: integer

include_full optional boolean

When true, include raw upstream curve arrays and activity maps.

default: false

newest required string

Local end date YYYY-MM-DD.

oldest required string

Local start date YYYY-MM-DD.

sport optional string

Optional intervals.icu sport/type filter for the upstream type parameter. Omit to let upstream aggregate its default pace curve set.

full toolsetread
get_performance_potential

Summarize per-sport performance potential from explicit athlete profile thresholds plus upstream power, pace, and heart-rate curve anchors.

Arguments (7)
end_date required string

Local end date YYYY-MM-DD for upstream curve anchors.

hr_duration_seconds optional array

Heart-rate anchor buckets. Defaults to 5,15,30,60,300,1200,3600 seconds.

items: integer

include_full optional boolean

When true, include raw upstream curve payloads under each sport.full; terse default returns only selected anchors, statuses, caveats, and metadata.

default: false

pace_distance_meters optional array

Pace-distance anchor buckets for pace sports. Defaults depend on sport: run-style 400,1000,1609,5000,10000m; swim 50,100,200,400,1500m.

items: integer

power_duration_seconds optional array

Power-duration anchor buckets for power-based sports. Defaults to 5,15,30,60,300,1200,3600 seconds.

items: integer

sports optional array

Intervals.icu sport/type labels to summarize. Defaults to Ride, Run, Swim. Each sport remains in its own unit/source namespace.

items: string

start_date required string

Local start date YYYY-MM-DD for upstream curve anchors.

full toolsetread
get_power_curves

Get the upstream-computed mean-maximal power curve for a date range.

Arguments (5)
duration_seconds optional array

Power curve buckets to return. Defaults to 5,15,30,60,300,1200,3600 seconds.

items: integer

include_full optional boolean

When true, include raw upstream curve arrays and activity maps.

default: false

newest required string

Local end date YYYY-MM-DD.

oldest required string

Local start date YYYY-MM-DD.

sport optional string

Intervals.icu sport/type for the required upstream type parameter; defaults to Ride.

default: "Ride"

full toolsetread
get_today

Answer how's today looking with one terse daily digest: today's CTL/ATL/TSB fitness, wellness, completed activities, planned events, and NOTE/race annotations.

Arguments (1)
include_full optional boolean

When true, include raw upstream payloads under each digest section's rows. Defaults to false for a terse today digest.

default: false

coreread
get_training_summary

Get aggregated training volume, neutral training load, sRPE, and upstream zone-order totals for a local date range.

Arguments (3)
end_date required string

local end date as YYYY-MM-DD in the athlete timezone.

include_full optional boolean

When true, include raw upstream summary rows.

default: false

start_date required string

local start date for summary rows as YYYY-MM-DD in the athlete timezone.

coreread

Analyzers

ToolSummary and inputsTierSafety
analyze_correlation

Use when the prompt asks whether two analysis metrics are correlated or lagged together, including explicitly requested activity custom fields via metric custom:<field_code> plus custom_fields; do not fetch get_* rows or streams and reduce them in chat.

Arguments (9)
custom_fields optional array

Optional athlete-defined activity custom field codes to fetch for custom:<field> correlation metrics; defaults to none.

items: string

include_full optional boolean

When true, include paired samples; terse mode omits raw rows.

default: false

lag_days optional integer

Positive lag pairs x on D with y on D+lag.

default: 0

method optional string

enum: pearson, spearman default: "pearson"

metric_x required string

X metric. Use a canonical analysis_metric enum value or custom:<field_code> when that code is also listed in custom_fields.

metric_y required string

Y metric. Use a canonical analysis_metric enum value or custom:<field_code> when that code is also listed in custom_fields.

pairing_grain optional string

enum: daily, activity default: "daily"

sport optional string

Optional sport/category filter for activity-backed metrics.

window required object

Inclusive athlete-local anchor window for metric_x.

  • end_date string required — Inclusive athlete-local end date YYYY-MM-DD.
  • start_date string required — Inclusive athlete-local start date YYYY-MM-DD.
full toolsetread
analyze_distribution

Use when the prompt asks for an analysis metric's distribution, histogram, quantiles, or outliers; do not fetch get_* rows or streams and reduce them in chat.

Arguments (7)
bucket_count optional integer

Number of equal-width histogram buckets when buckets is omitted.

default: 10

buckets optional array

Optional numeric bucket boundaries; values outside are counted below_range/above_range.

items: number

include_full optional boolean

When true, include sampled values; terse mode omits raw rows.

default: false

metric required string

Metric to summarize. analysis_metric enum; choose one canonical value such as ctl, atl, tsb, weekly_tss, hrv, sleep_secs, if, or vi. Safe aliases are accepted by the server, but schemas enumerate canonical values only. Expressions such as ctl/atl are not supported.

enum: abdomen, aerobic_decoupling_percent, atl, atl_load, average_cadence_rpm, average_heart_rate_bpm, average_power_watts, average_speed_kmh, average_speed_mph, avg_sleeping_hr, baevsky_si, blood_glucose, body_fat, calories_burned, carbohydrates, cardiac_decoupling_percent, compliance_pct, ctl, ctl_load, dfa_alpha1, diastolic, distance_km, distance_m, distance_mi, duration_seconds, elapsed_time_seconds, elevation_gain_m, elevation_loss_m, fat_total, fatigue, feel, hr_load, hrv, hrv_sdnn, hydration, hydration_volume, if, joules_above_ftp_kj, kcal_consumed, lactate, left_right_balance_percent, max_heart_rate_bpm, max_speed_kmh, max_speed_mph, mood, motivation, moving_time_seconds, pace_load, pace_seconds_per_km, pace_seconds_per_mile, polarization_index, power_load, protein, pw_hr, ramp, readiness, respiration, rhr, rpe, session_rpe, sleep_quality, sleep_score, sleep_secs, soreness, sp_o2, steps, strain_score, stress, stride_length_m, systolic, time_in_zones_total_seconds, time_seconds, training_load, trimp, tsb, vi, vo2max, w_prime_balance_end_kj, w_prime_balance_start_kj, weekly_hours, weekly_tss, weight

quantiles optional array

Quantiles to compute; defaults to 0.25, 0.5, 0.75.

items: number

sport optional string

Optional sport/category filter for activity-backed metrics.

window required object

Inclusive athlete-local window.

  • end_date string required — Inclusive athlete-local end date YYYY-MM-DD.
  • start_date string required — Inclusive athlete-local start date YYYY-MM-DD.
full toolsetread
analyze_efforts_delta

Use when the prompt asks about named best-effort curve buckets (for example 5 min power, 20 min HR, or 5k pace) and current-vs-baseline deltas; do not fetch get_* rows or streams and reduce them in chat.

Arguments (7)
baseline_window optional object

Optional baseline inclusive athlete-local window; defaults to same length immediately before current_window.

  • end_date string required — Inclusive athlete-local end date YYYY-MM-DD.
  • start_date string required — Inclusive athlete-local start date YYYY-MM-DD.
current_window required object

Current inclusive athlete-local best-efforts window.

  • end_date string required — Inclusive athlete-local end date YYYY-MM-DD.
  • start_date string required — Inclusive athlete-local start date YYYY-MM-DD.
distance_meters optional array

Required for pace; invalid for power or heart_rate.

items: integer

duration_seconds optional array

Required/defaulted for power or heart_rate; invalid for pace.

items: integer

effort_family required string

enum: power, heart_rate, pace

include_full optional boolean

When true, include current/baseline bucket series; terse mode omits raw curve arrays.

default: false

sport required string

Intervals.icu sport/type to compare, e.g. Ride or Run.

full toolsetread
analyze_trend

Use when the prompt asks for slope or rolling trend direction over time for one analysis metric; do not fetch get_* rows or streams and reduce them in chat.

Arguments (6)
baseline_window optional object

Optional baseline inclusive athlete-local window; defaults to same length immediately before window.

  • end_date string required — Inclusive athlete-local end date YYYY-MM-DD.
  • start_date string required — Inclusive athlete-local start date YYYY-MM-DD.
include_full optional boolean

When true, include sampled series and rolling means; terse mode omits raw rows.

default: false

metric required string

Metric to trend. analysis_metric enum; choose one canonical value such as ctl, atl, tsb, weekly_tss, hrv, sleep_secs, if, or vi. Safe aliases are accepted by the server, but schemas enumerate canonical values only. Expressions such as ctl/atl are not supported.

enum: abdomen, aerobic_decoupling_percent, atl, atl_load, average_cadence_rpm, average_heart_rate_bpm, average_power_watts, average_speed_kmh, average_speed_mph, avg_sleeping_hr, baevsky_si, blood_glucose, body_fat, calories_burned, carbohydrates, cardiac_decoupling_percent, compliance_pct, ctl, ctl_load, dfa_alpha1, diastolic, distance_km, distance_m, distance_mi, duration_seconds, elapsed_time_seconds, elevation_gain_m, elevation_loss_m, fat_total, fatigue, feel, hr_load, hrv, hrv_sdnn, hydration, hydration_volume, if, joules_above_ftp_kj, kcal_consumed, lactate, left_right_balance_percent, max_heart_rate_bpm, max_speed_kmh, max_speed_mph, mood, motivation, moving_time_seconds, pace_load, pace_seconds_per_km, pace_seconds_per_mile, polarization_index, power_load, protein, pw_hr, ramp, readiness, respiration, rhr, rpe, session_rpe, sleep_quality, sleep_score, sleep_secs, soreness, sp_o2, steps, strain_score, stress, stride_length_m, systolic, time_in_zones_total_seconds, time_seconds, training_load, trimp, tsb, vi, vo2max, w_prime_balance_end_kj, w_prime_balance_start_kj, weekly_hours, weekly_tss, weight

rolling_window_days optional integer

Trailing usable-sample rolling mean window. Must not exceed current window; weekly metrics require multiples of 7.

default: 7

sport optional string

Optional sport/category filter for activity-backed metrics.

window required object

Current inclusive athlete-local window.

  • end_date string required — Inclusive athlete-local end date YYYY-MM-DD.
  • start_date string required — Inclusive athlete-local start date YYYY-MM-DD.
coreread
compute_activity_segment_stats

Use when the prompt asks for mean, median, p90, normalized power, intensity factor, drift, or decoupling over an explicit activity segment, including first-vs-last distance comparisons, as the analyzer-family raw-stream exception, or when get_activity_intervals reports a single averaged/collapsed lap caveat and the user needs stream-based evidence before judging interval execution; do not fetch get_activity_streams samples and reduce them in chat.

Arguments (9)
activity_id required string

Required intervals.icu activity ID whose canonical raw streams should be analyzed.

end_distance_m optional number

Inclusive segment end distance in meters; must be greater than start_distance_m.

end_seconds optional number

Inclusive segment end in elapsed activity seconds; must be greater than start_seconds.

ftp_watts optional number

Required for stat=if only; positive athlete FTP in watts used as NP / FTP denominator.

include_full optional boolean

When true, include only sliced/calculation inputs needed to audit this stat. Terse mode never returns raw stream samples.

default: false

metric optional string

Canonical stream metric for mean/median/p90 only: watts, heart_rate, cadence, velocity_smooth, distance, or time. Use velocity_smooth for pace comparisons and convert m/s to pace in the final answer. Omit for derived stats.

enum: cadence, distance, heart_rate, time, velocity_smooth, watts

start_distance_m optional number

Inclusive segment start distance in meters. Provide with end_distance_m and without time bounds.

start_seconds optional number

Inclusive segment start in elapsed activity seconds. Provide with end_seconds and without distance bounds.

stat required string

Single segment statistic to compute. Use one of mean, median, p90, decoupling, drift, np, or if.

enum: decoupling, drift, if, mean, median, np, p90

full toolsetread
compute_baseline

Use when the prompt asks whether current metric values are unusual relative to a historical baseline via z-score/status bands; do not fetch get_* rows or streams and reduce them in chat.

Arguments (8)
baseline_end_date required string

Baseline inclusive athlete-local end date YYYY-MM-DD.

baseline_start_date required string

Baseline inclusive athlete-local start date YYYY-MM-DD.

current_end_date required string

Current inclusive athlete-local end date YYYY-MM-DD.

current_start_date required string

Current inclusive athlete-local start date YYYY-MM-DD.

include_full optional boolean

When true, include baseline/current audit samples; default returns aggregate statistics only.

default: false

metric required string

analysis_metric enum; choose one canonical value such as ctl, atl, tsb, weekly_tss, hrv, sleep_secs, if, or vi. Safe aliases are accepted by the server, but schemas enumerate canonical values only. Expressions such as ctl/atl are not supported.

enum: abdomen, aerobic_decoupling_percent, atl, atl_load, average_cadence_rpm, average_heart_rate_bpm, average_power_watts, average_speed_kmh, average_speed_mph, avg_sleeping_hr, baevsky_si, blood_glucose, body_fat, calories_burned, carbohydrates, cardiac_decoupling_percent, compliance_pct, ctl, ctl_load, dfa_alpha1, diastolic, distance_km, distance_m, distance_mi, duration_seconds, elapsed_time_seconds, elevation_gain_m, elevation_loss_m, fat_total, fatigue, feel, hr_load, hrv, hrv_sdnn, hydration, hydration_volume, if, joules_above_ftp_kj, kcal_consumed, lactate, left_right_balance_percent, max_heart_rate_bpm, max_speed_kmh, max_speed_mph, mood, motivation, moving_time_seconds, pace_load, pace_seconds_per_km, pace_seconds_per_mile, polarization_index, power_load, protein, pw_hr, ramp, readiness, respiration, rhr, rpe, session_rpe, sleep_quality, sleep_score, sleep_secs, soreness, sp_o2, steps, strain_score, stress, stride_length_m, systolic, time_in_zones_total_seconds, time_seconds, training_load, trimp, tsb, vi, vo2max, w_prime_balance_end_kj, w_prime_balance_start_kj, weekly_hours, weekly_tss, weight

min_samples optional integer

Minimum usable baseline samples required before z-score calculation.

default: 7

sport optional string

Optional exact case-insensitive activity sport/type filter where the selected source supports sport filtering.

coreread
compute_compliance_rate

Use when the prompt asks how well completed activities matched scheduled workouts, targets, sport, or event type; do not fetch get_* rows or streams and reduce them in chat.

Arguments (8)
category optional string

Optional upstream event category filter.

default: "WORKOUT"

end_date required string

Athlete-local inclusive end date YYYY-MM-DD.

event_type optional string

Optional exact case-insensitive event type filter.

include_full optional boolean

When true, include event-level pairing audit rows.

default: false

sport optional string

Optional exact case-insensitive sport/type filter.

start_date required string

Athlete-local inclusive start date YYYY-MM-DD.

target_metric optional string

Target/actual metric used for compliance.

enum: time, distance, load default: "time"

tolerance_percent optional number

Absolute percent delta allowed for compliance.

default: 20

full toolsetread
compute_load_balance

Use when the prompt asks whether training distribution is polarized, pyramidal, threshold-heavy, or balanced across low/moderate/high intensity; do not fetch get_* rows or streams and reduce them in chat.

Arguments (5)
end_date required string

Athlete-local inclusive end date YYYY-MM-DD.

include_full optional boolean

When true, include per-source audit rows. Default returns aggregate zones/buckets only.

default: false

sport optional string

Optional exact case-insensitive activity sport/type filter.

start_date required string

Athlete-local inclusive start date YYYY-MM-DD.

zone_metric optional string

Precomputed zone family to aggregate; raw streams are never fetched as fallback.

enum: power, heart_rate, pace default: "power"

full toolsetread
compute_zone_time

Use when the prompt asks for zone-time totals or intensity distribution (seconds/share in Z1-Zn) across activities in a date window; do not fetch get_* rows or streams and reduce them in chat.

Arguments (5)
end_date required string

Athlete-local inclusive end date YYYY-MM-DD.

include_full optional boolean

When true, include per-source audit rows. Default returns aggregate zones/buckets only.

default: false

sport optional string

Optional exact case-insensitive activity sport/type filter.

start_date required string

Athlete-local inclusive start date YYYY-MM-DD.

zone_metric required string

Precomputed zone family to aggregate; raw streams are never fetched as fallback.

enum: power, heart_rate, pace default: "power"

coreread
get_data_quality_report

Report whether icuvisor can see enough activities, streams, load, wellness, thresholds, and calendar data to answer common coaching questions, with actionable diagnostics for Strava restrictions, HR/TRIMP-only load, stale wellness, missing thresholds, and sparse history.

Arguments (4)
end_date required string

Inclusive athlete-local report end date YYYY-MM-DD.

include_full optional boolean

When true, include bounded evidence lists (activity samples, summary dates, wellness dates, calendar events). Raw stream samples are never fetched by this report.

default: false

sport optional string

Optional sport/category filter such as Ride, Run, Swim, or VirtualRide. Leave empty to inspect all visible data.

start_date required string

Inclusive athlete-local report start date YYYY-MM-DD.

coreread

Wellness

ToolSummary and inputsTierSafety
get_wellness_data

Get daily wellness rows for a local date range with distinct sleepQuality, sleepScore, sleepSecs, nutrition keys calories_intake/carbs_g/protein_g/fat_g when present, custom fields, native provider sidecars, and provider-native provenance scale labels for sleep/readiness.

Arguments (4)
fields optional array

Optional upstream wellness field names to request; custom fields are preserved when returned.

items: string

include_full optional boolean

When true, include the raw upstream wellness row under full and keep null fields.

default: false

newest required string

Local newest wellness date YYYY-MM-DD in the athlete timezone, inclusive.

oldest required string

Local oldest wellness date YYYY-MM-DD in the athlete timezone.

coreread
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).

Arguments (24)
abdomen optional number

Manual abdomen circumference in cm.

bloodGlucose optional number

Manual blood glucose in the upstream intervals.icu wellness unit.

bodyFat optional number

Manual body fat percentage, 0-100%.

date required string

Required athlete-local wellness date as YYYY-MM-DD.

diastolic optional integer

Manual diastolic blood pressure in mmHg.

fatigue optional integer

1-5 (athlete-reported fatigue); fatigue scale.

feel optional integer

1-5 (athlete-reported feel); feel scale.

hrv optional number

Manual HRV in milliseconds rMSSD.

include_full optional boolean

When true, include the raw upstream wellness row under wellness.full and keep null fields.

default: false

injury optional string

Optional free-text injury or limitation note. Preserved verbatim.

lactate optional number

Manual blood lactate in mmol/L.

locked optional boolean

When true, ask upstream to lock the wellness row against device-sync overwrites.

menstrualPhase optional string

Menstrual phase as accepted by intervals.icu; free-text string until the upstream enum contract is verified.

mood optional integer

1-5 (athlete-reported mood); mood scale.

motivation optional integer

1-5 (athlete-reported motivation); motivation scale.

respiration optional number

respiration: breaths per minute.

restingHR optional integer

Manual resting heart rate in bpm.

sleepQuality optional integer

1-4 (athlete-entered, 1=poor 4=great); sleepQuality scale.

soreness optional integer

1-5 (athlete-reported soreness); soreness scale.

spO2 optional number

spO2: blood oxygen saturation percentage 0-100.

stress optional integer

1-5 (athlete-reported stress); stress scale.

systolic optional integer

Manual systolic blood pressure in mmHg.

vo2max optional number

vo2max: ml/kg/min.

weight optional number

Manual body weight in the athlete's preferred weight unit from get_athlete_profile (_meta.units / units.weight); converted to upstream kg at the API boundary.

Input examples (2)
{"date":"2026-06-15","fatigue":2}
{"date":"2026-06-16","fatigue":2,"hrv":62.5,"locked":true,"mood":4,"motivation":4,"restingHR":48,"sleepQuality":3,"soreness":2,"stress":3}
corewrite

Custom items

ToolSummary and inputsTierSafety
create_custom_item

Create one custom item definition.

Arguments (8)
content required object

Required item_type-specific content object. Validated against existing readable custom items before upload; see icuvisor://custom-item-schemas for schema guidance.

additional properties: allowed

description optional string

Optional custom item description. Preserved verbatim when supplied.

hide_script optional boolean

Optional upstream hide_script flag for script/formula based custom items.

image optional string

Optional upstream image identifier or URL when supported by the custom-item type.

index optional integer

Optional display/order index for item types that support ordering.

item_type required string

Required upstream custom-item type. The value must match an existing readable schema sample, for example FITNESS_CHART, INPUT_FIELD, ACTIVITY_FIELD, ACTIVITY_STREAM, ACTIVITY_PANEL, ACTIVITY_HISTOGRAM, ACTIVITY_MAP, ACTIVITY_HEATMAP, TRACE_CHART, FITNESS_TABLE, or ZONES.

name required string

Required custom item name. Surrounding whitespace is trimmed.

visibility optional string

Optional upstream visibility value. Omit to use intervals.icu defaults.

Input examples (2)
{"content":{"layout":{"height":240},"series":[{"color":"blue","field":"ctl"}]},"item_type":"FITNESS_CHART","name":"Training load trend"}
{"content":{"field":"travel_fatigue","format":"0.0","label":"Travel fatigue","script":"return input","type":"number","units":"score","visibility":"PRIVATE"},"description":"Short coach-facing note captured on travel weeks.","hide_script":false,"index":20,"item_type":"INPUT_FIELD","name":"Travel fatigue note","visibility":"PRIVATE"}
full toolsetwrite
delete_custom_item

Delete one custom item definition by item_id.

Arguments (1)
item_id required string

Required opaque upstream custom item ID to delete. This destructive operation has no confirm argument; the tool is registered only when ICUVISOR_DELETE_MODE=full.

full toolsetdelete
get_custom_item_by_id

Fetch one custom item by item_id and preserve its full content payload.

Arguments (1)
item_id required string

Required intervals.icu custom item ID.

full toolsetread
get_custom_items

List custom item definitions such as charts, fields, streams, panels, histograms, maps, and zones.

Arguments (1)
item_type optional string

Optional upstream custom-item type filter, for example FITNESS_CHART, INPUT_FIELD, ACTIVITY_FIELD, ACTIVITY_STREAM, ACTIVITY_PANEL, ACTIVITY_HISTOGRAM, ACTIVITY_MAP, ACTIVITY_HEATMAP, TRACE_CHART, FITNESS_TABLE, or ZONES.

full toolsetread
update_custom_item

Update one custom item definition by item_id with sparse fields only.

Arguments (8)
content optional object

Optional sparse content patch. Validated against the existing item_type schema, then merged so omitted keys stay untouched; see icuvisor://custom-item-schemas.

additional properties: allowed

description optional string

Optional replacement custom item description. Omit to leave unchanged; empty strings are preserved when intentionally supplied.

hide_script optional boolean

Optional replacement upstream hide_script flag. Omit to leave unchanged.

image optional string

Optional replacement upstream image identifier or URL when supported by the custom-item type. Omit to leave unchanged.

index optional integer

Optional replacement display/order index. Omit to leave unchanged.

item_id required string

Required intervals.icu custom item ID to update. Surrounding whitespace is trimmed.

name optional string

Optional replacement custom item name. Omit to leave unchanged.

visibility optional string

Optional replacement upstream visibility value. Omit to leave unchanged.

Input examples (2)
{"item_id":"custom-item-example-3","name":"Training load trend - coach view"}
{"content":{"layout":{"height":300}},"description":"Updated description for the coach dashboard.","item_id":"custom-item-example-4","visibility":"PRIVATE"}
full toolsetwrite

Sport settings

ToolSummary and inputsTierSafety
delete_gear

Delete one gear item by gear_id.

Arguments (1)
gear_id required string

Required opaque upstream gear ID to delete. This destructive operation has no confirm argument; the tool is registered only when ICUVISOR_DELETE_MODE=full.

full toolsetdelete
delete_sport_settings

Delete one sport-settings definition by sport_settings_id.

Arguments (1)
sport_settings_id required string

Required opaque upstream sport-settings ID to delete. This destructive operation has no confirm argument; the tool is registered only when ICUVISOR_DELETE_MODE=full.

full toolsetdelete
get_athlete_profile

Get the configured athlete profile, FTP/thresholds, zones, and sport settings from intervals.icu.

Arguments (1)
include_full optional boolean

When true, include additional typed, non-secret profile and sport-setting identifiers. Defaults to false; raw upstream payloads and credentials are never returned.

default: false

coreread
get_gear_list

List the athlete's intervals.icu gear with IDs and human-readable names for resolving activity gear_id fields.

Arguments (2)
include_full optional boolean

When true, include raw upstream gear fields under each row's full object; default terse rows include gear_id, name/name_missing, type, brand, model, and retired.

default: false

refresh optional boolean

When true, bypass the manual in-process per-athlete gear cache and fetch a fresh list from intervals.icu. Failed refreshes do not replace the last successful cache entry.

default: false

full toolsetread
update_sport_settings

Update one sport's FTP, threshold heart rate, threshold pace, or zone definitions referenced by get_athlete_profile _meta.warnings.

Arguments (6)
effective_date required string

Required athlete-local effective date as YYYY-MM-DD; used as the oldest date for upstream sport-setting recompute.

ftp optional integer

Functional Threshold Power in watts for the selected sport.

sport required string

Sport setting to update, matching intervals.icu sport type (for example Ride, Run, Swim).

enum: Ride, Run, Swim, VirtualRide, Walk, Hike, Rowing, WeightTraining, AlpineSki, NordicSki, Other

threshold_hr optional integer

Threshold heart rate in bpm for the selected sport.

threshold_pace optional object

Threshold pace with an explicit pace-duration unit; seconds_per_km is 4:15/km as 255, seconds_per_mile is 8:00/mi as 480, and seconds_per_100y is 1:30/100y as 90.

  • unit string required — Pace-duration unit for threshold_pace value.
  • value number required — Threshold pace duration in the provided unit, not speed.
zones optional array

Optional destructive replacement zone definitions. Supplying zones overwrites prior power/hr/pace zone definitions for this sport and is rejected unless ICUVISOR_DELETE_MODE=full.

items: object

Input examples (2)
{"effective_date":"2026-06-01","ftp":285,"sport":"Ride"}
{"effective_date":"2026-06-01","sport":"Run","threshold_hr":172,"threshold_pace":{"unit":"seconds_per_km","value":255}}
full toolsetwrite

Coach mode

ToolSummary and inputsTierSafety
list_athletes

List the coach-mode roster configured for this icuvisor server.

coreread
select_athlete

Select the default target athlete for subsequent coach-mode tool calls in this MCP session.

Arguments (1)
athlete_id required string

Target athlete to select for this session. Format: i12345 or 12345.

coreread

Server

ToolSummary and inputsTierSafety
icuvisor_check_server_version

Check whether the MCP client is using stale icuvisor tool descriptions after an upgrade.

coreread
icuvisor_list_advanced_capabilities

Use only when the user asks what other icuvisor tools are available or when a requested advanced/delete capability is not visible in the current tool catalog.

coreread