Changelog
Updates that affect how you use IcuSync with Claude.
After any update below, refresh your tools. Claude caches the IcuSync tool list. A new tool, or a new option on a tool you already have, won’t reach Claude until you refresh, and starting a new conversation doesn’t do it. Click the three-dot menu next to IcuSync in your Claude Customize settings, select Refresh tools list, then start a fresh conversation. If Claude still doesn’t see the change, disconnect and reconnect IcuSync.
16 Oct 2026
- Strength training support. Connect a strength app to Claude alongside IcuSync, such as Hevy or Strava's own connector (which needs a paid Strava subscription), and Claude can plan gym sessions around your runs and rides, add them to your Intervals.icu calendar as WeightTraining workouts, and copy your sets, reps and weights into the activity notes. IcuSync doesn't connect to Hevy or Strava itself: you add those to Claude separately. Read the guide: Plan strength training around your runs and rides with Claude.
- Improved
push_workoutkeeps the exercise list in a WeightTraining workout exactly as written, so it reads cleanly in your calendar.edit_workoutdoes the same when you change one. - Improved
get_training_historytells Claude that Intervals.icu stores time, heart rate and training load for strength sessions but not exercises or weights, so Claude looks for those in your strength app or the activity notes instead.
13 Oct 2026
- Connecting Claude no longer needs an API token. In Claude, add a custom connector named IcuSync with the URL
https://mcp.icusync.icu/mcp, click Connect, sign in to IcuSync if asked and click Authorize. Existing token-based connections keep working, and ChatGPT, Grok and the Claude Desktop Extension still use your API token. - Improved
delete_workoutconfirms the name and date of the workout it deleted. - Improved
get_training_historyexplains straight away when some activities came from Strava and how to sync your device directly to Intervals.icu instead.
4 Oct 2026
- Improved
get_interval_intensity_statsnow analyse any stretch of an activity you name, not just the recorded laps. Just say something like "analyse my 3x10min reps" or "skip the neutral start": Claude finds the sections from your lap times and returns clean per-section stats using new optionalranges(by elapsed time or distance): duration, distance, average speed, average HR, normalized power, plus the usual median, settled mean and time in a target band. Ideal when 1km or 1-mile auto-laps split your reps, or a race file includes a neutral start or waiting time before the racing begins.
Thedrifttrend is also sharper: it now focuses on your main set of reps, so easy warmup and cooldown laps no longer affect the result, anddrift.interval_numbersshows exactly which reps it used. - Improved
get_activity_detailshows where each interval and lap starts and ends in the activity (start_time_secondsandend_time_seconds), so Claude can pinpoint your reps quickly and pass precise sections toget_interval_intensity_stats.
24 Sep 2026
- Updated
get_extended_metricssupports Intervals.icu's new native running metrics: ground contact time and GCT %, GCT balance, vertical oscillation, vertical ratio, vertical speed, stride length, leg spring stiffness, impact loading rate, plus flight time and flight ratio. Every metric now carries its unit in the name, native values take priority over older custom Stryd or Garmin streams so the same metric is no longer reported twice (a newmetric_sourcesfield says which sensor's value was used, so you don't mix watch and Stryd numbers across runs), and averages use Intervals.icu's own figures, which exclude standing-still zeros. The response is also much leaner: standard streams like power and heart rate, and built-in activity fields, are no longer mixed in with your custom fields. Activities recorded before the rollout may need reanalysing in Intervals.icu to pick up the native metrics. - Updated
get_activity_detailincludes arunning_dynamicsblock for runs, on the activity and on each interval: ground contact time, GCT %, GCT balance, vertical oscillation, vertical ratio, step length, leg spring stiffness and impact loading rate, when your device records them. Runs, walks and hikes also getaverage_step_rate_spm, cadence in steps per minute, since Intervals.icu stores run cadence per foot (a 182 steps/min runner shows as 91).
17 Sep 2026
- Added
add_activity_commentto post a comment on a completed activity's comment thread in intervals.icu: coaching feedback, a note on how a session went, or a reply. - Updated
get_activity_detailhas acommentssection (passsections:["comments"]to fetch it on its own) that reads an activity's comment thread, the same threadadd_activity_commentposts to. Deleted comments are excluded. - Added
get_comparable_effortsto find past activities with an interval effort matching a target duration and intensity, for example a 5-minute effort around 120% FTP. Useful for longer-term programme reviews and progression tracking rather than only the last few days. - Added
get_training_planto read whichever training plan the athlete is currently assigned to in intervals.icu, if any: plan name, duration in weeks, which week they're currently in, target hours per week, and starting fitness. It only reads that one already-assigned plan, it cannot search or browse other plans in the athlete's library, and it cannot assign a new plan or switch the athlete off their current one, that still has to be done in intervals.icu directly.
15 Sep 2026
- Added
get_grade_adjusted_paceto convert a run's actual hilly pace into its flat-ground-equivalent effort, using the same published running-economy-of-grade model behind grade-adjusted pace (GAP) on Strava, TrainingPeaks and Intervals.icu itself. Returns raw pace alongside GAP per km or mile split, plus a whole-run comparison and a plain-language summary, so a hilly "slow" run can be read for what it actually cost versus a flat one. Running only (Run, Walk, Hike): rides are unaffected, since power already accounts for grade. A run with no elevation data reports raw pace only; GAP is never fabricated from missing elevation. - Added
get_pacing_shapeto classify how effort was actually distributed across a continuous run or ride: negative split, positive split, or even, split into halves or thirds. Running compares grade-adjusted pace internally, so a run that "slows" late on a hill correctly reads as even rather than fading. Riding compares normalized power when a power stream is present. Deliberately does not force a read onto a structured interval session with rest between reps: it defers toget_interval_intensity_statsfor those instead. - Updated
get_interval_intensity_statsreturns a top-leveldriftobject once a session has 3 or more qualifying intervals: a first-to-last percentage change plus a trend label (holding, fading, building, or inconsistent) fitted across every interval in chronological order, not just the two endpoints, so a set that dips mid-way and recovers on a strong final rep is not misread as holding steady.
7 Sep 2026
- Updated
get_fitnessreports the daily training load for each day. Theloadfield was always null even though intervals.icu holds the value, which forced Claude to back-derive load by inverting ATL and get it slightly wrong. CTL and ATL are also returned at full precision instead of being rounded to one decimal place (anything derived from day-to-day ATL differences amplified that rounding), and the day series is now a proper JSON array with a stable order. - Updated
get_training_historyfills infitness_metricswith your current CTL, ATL, TSB and ramp rate, read from the latest wellness record. It previously returned an empty object there despite the tool description promising those values. - Updated
get_wellnessreturns the nativeinjuryandabdomen(waist measurement) fields. Both are standard intervals.icu wellness fields and were being silently dropped, so any analysis of an injury or rehab period could not see the one field that defined it. - A wellness or fitness value you just wrote now reads back immediately.
get_wellnessandget_fitnessqueries that reach into the last few days skip the short-lived response cache, so verifying a change no longer returns the pre-change state until the cache expires. Purely historical date ranges are still cached. - Updated
get_activity_detailhandles long activities without failing. A multi-hour session with dozens of intervals and splits could exceed the assistant's tool-result size limit and return nothing at all. There is a newsectionsparameter to fetch only what you need (for example the summary alone, or the distance splits without the full interval list), and if a response would still be too large the heaviest sections are dropped automatically with a note explaining how to retrieve them in a follow-up call. Every per-interval field intervals.icu provides is still returned. - Updated
push_wellnesswrites far more of the wellness record and supports bulk backfill. New native fields: body fat %, waist (abdomen) measurement and the injury/pain flag, plus SpO2 and VO2max when you report a genuinely measured value. Your own custom wellness fields can be written through a newcustom_fieldsparameter, keyed by the exact intervals.icu field code and checked against the fields already set up on your account: an unknown or mistyped code is rejected with the list of known codes rather than silently created. A newdaysarray writes many days in a single request for journal backfills, instead of one call per day. And setting any field tonullnow clears it for that day. Previously anullon a built-in field was silently ignored while still reporting success. The response now separatesfields_clearedfromfields_updated.
3 Sep 2026
- Added
get_interval_intensity_statsfor interval and lap sessions where the plain per-rep average is misleading: it slices the power or speed stream to each interval boundary server-side and returns the median, the interquartile range, the coefficient of variation, and asettled_meanthat excludes the lead-in ramp (auto-detected, or a fixedwarmup_trim_seconds). A 4 min rep whose average reads low because the first 15s were spent spinning up now shows what was actually held once up to effort. Pass an optional target band (target_low/target_high, in watts or in pace) and each interval also reports time in band, time easier than target, and time harder than target. Works for any activity with defined intervals and a power stream (Ride, Rowing, power-based Run) or a speed stream (Run, Ride, Walk, Hike, Swim);metricforces power or pace. Only the computed summary is returned. Raw stream data is never sent to Claude. get_activity_detailandget_training_historynow returnelapsed_time_seconds(wall-clock time from start to finish, including every stop) andmoving_time_seconds(stops excluded) alongside the existingduration_minutes. Previously only moving time was exposed, so ultra-distance and brevet analysis (time cuts, overnight and drop-bag planning) had no access to an activity's true elapsed time even though intervals.icu records it.
26 Aug 2026
- Added
get_ride_power_patternsfor Ride activities: coasting time split into short coasts (a few seconds, still part of an effort, e.g. between pedal strokes on technical trail) versus long coasts (genuine rest, a sustained descent or a stop), plus detection of repeated short hard/easy burst patterns (unplanned on-off intervals) common on technical MTB, cyclocross, gravel, or criterium terrain. Zone-time totals and average power hide both of these on rolling, technical terrain: a ride can show an unremarkable average and TSS while actually being a repeated sequence of hard efforts. Only the computed summary (coasting split, and each detected burst block's cycle count, average on/off duration, and average on-power) is returned. Raw power stream data is never sent to Claude. Requires a power meter; Ride activities only (including MTB, gravel, cyclocross, and virtual rides). - Updated
get_extended_metricsreturns whole-activity W' balance depletion:w_prime_balance_min_pct(the lowest the W' reserve dropped to, as a percentage of capacity) andw_prime_balance_seconds_below_25pct(how long the ride spent in a deeply depleted state). Previously only a plain average was available, which hides the difference between a ride that never troubled the reserve and one that ran it near empty despite an identical average.
16 Aug 2026
- Added
get_climb_segmentsto detect sustained climb segments in an activity and compute VAM (Vertical Ascent in Meters per hour) for each: which climbs were steepest, which had the best VAM, how HR or power held up on a specific climb. Works for Ride as well as Run, Hike, and Walk. For rides with a power meter, each climb also gets its average power alongside VAM and grade. Useful for cycling climbing analysis as well as mountain, trail, and ultra training. The altitude/distance stream is resampled server-side at 50m resolution to detect climbs reliably, bridging short flat or downhill sections mid-climb (a "shelf") so a climb that briefly flattens is reported as one segment rather than split into several. Bridging is bounded by both distance (max_gap_m) and elevation lost (max_gap_elevation_loss_m) so it can't stretch across a real descent, and an optional min_elevation_gain_m filters for major climbs only. Only the computed climb list is returned. Raw stream data is never sent to Claude. Requires outdoor activities with GPS or barometric altitude.
13 Aug 2026
- Updated
get_activity_detailreturnsdistance_splits: exact fixed-distance splits computed directly from the GPS/distance stream, independent of workout-structure or device-lap boundaries. Previously, per-interval pace was only as precise as whatever segments a structured workout or device auto-lap produced, which could be off by several seconds per km when a "main set" segment didn't land on a clean distance boundary. Available for Run and Ride activities of at least 1km (or 1mi), with pace (or speed in km/h/mph for rides), HR, power, cadence, and elevation gain per split. Swim activities get splits every 100m with/100mpace, matching how swimmers think about pace regardless of km/mi preference.
26 Jul 2026
- Added
update_sport_settingsto write threshold values back to intervals.icu. Claude can now update your FTP, threshold pace, LTHR, max HR, and W' for Run, Ride, and Swim directly, for example after a ramp test, a zFTP update, or when the built-in threshold accuracy check flags your settings as out of date. Claude always shows you the current value and the proposed new value and asks for confirmation before writing anything. Power and pace zones are stored as percentages of FTP/threshold pace in intervals.icu, so they stay correct automatically when you update those values. HR zones are stored as absolute bpm and are left untouched unless you specifically ask Claude to regenerate them, since that would overwrite any HR zones you have customized manually. Only these threshold fields are writable: zone boundaries, custom activity fields, and other sport settings must still be edited directly in intervals.icu. - The intervals.icu OAuth connection now requests Settings Update permission alongside the existing read permissions. Existing users need to grant this before
update_sport_settingswill work. You can do this by going to intervals.icu Settings, Apps, finding IcuSync and clicking edit to add the Settings update permission. Alternatively, reconnect your intervals.icu account from the IcuSync dashboard.
24 Jun 2026
- Updated
get_power_curvesto support durability ("after kJ") power curves. You can now ask for your power curve after a set amount of accumulated work, for example "show my power curve after 1000 kJ over the last 90 days", to see how your power holds up in a fatigued state and track durability over time. First set one or both "? kJ" thresholds on your Intervals.icu power curve page (click a "? kJ" label on the chart, enter a value such as 1000, wait for it to compute, then tick the box). The tool reads those configured thresholds and returns the work level alongside each curve. Requires ride activities with power data.
23 Jun 2026
- Direct Intervals.icu coach mode now works via API key. If you already coach athletes on Intervals.icu, go to Coach Access in your IcuSync dashboard, enter your Intervals.icu API key (found under Intervals.icu Settings → API Key), and save. IcuSync verifies the key against your coached athlete list and activates coach mode automatically. Claude will then see all your coached athletes with no setup required on their end. All 15 tools are available for every athlete. The earlier approach of connecting via OAuth for coach access did not work due to a privacy restriction in the Intervals.icu API: OAuth tokens are locked to the authenticated user's own data and cannot access coached athletes. The API key approach does not have this restriction.
Update: following community feedback, coaches must now confirm they have informed their athletes before activating coach mode. Athletes also receive an automatic notification email when a coach activates access. The privacy policy and terms have been updated to cover coach access explicitly.
16 Jun 2026
- Added
update_activityto write post-activity data back to intervals.icu. After a session, ask Claude to log how many grams of carbs you consumed, how the effort felt (feel score and RPE), which shoes or bike you used, or any values for custom Activity Fields you have configured in intervals.icu (e.g. lactate, pain scores, test results). Only the fields you provide are changed; everything else is left untouched. Strava-sourced activities cannot be updated via the API and must be edited directly in intervals.icu.
14 Jun 2026
- Pace ranges, watt ranges, and HR zone ranges now pass through directly to intervals.icu instead of being collapsed to a midpoint. When you ask Claude to push a workout with a range like 5:30/km–6:00/km or 240–260w, Garmin will show exactly that window rather than a single midpoint value matched to the nearest zone. If you want a midpoint, just ask Claude to calculate one before pushing.
- Custom Activity Fields are now included in
get_extended_metrics. Any fields you have configured in intervals.icu Settings → Activity Fields (e.g. lactate, RPE, pain scores, lab test results) now appear in the response alongside sensor streams, so Claude can factor them into analysis. - Updated
push_workoutandedit_workoutto support two new fields visible in the intervals.icu calendar entry dialog:carbs_per_hour(CHO/h fueling target in grams per hour) andload_target(planned training load). Both fields are also now returned byget_events.
8 Jun 2026
- Gear is now visible to Claude. The bike, shoes, or other equipment logged against an activity in intervals.icu is now returned by both
get_activity_detailandget_training_history. Claude can use this to distinguish rides done on different bikes (road, TT, MTB, gravel) and factor equipment into analysis and comparisons. - Manually added intervals are now correctly identified. Intervals you add yourself in the interval editor have no
group_id, while auto-detected intervals always belong to a group. Claude uses this to setinterval_sourcetomanually_added,auto_generated,mixed, ordevice_laps. Interval groups are also now visible with aggregate metrics per group (count, duration, average power, average HR).
5 Jun 2026
- Sport settings validation added to
get_athlete_profile. At the start of every session Claude now checks whether your configured sports have the threshold values and training zones needed for accurate analysis. The check is sport-aware: it only validates sports you have actually set up in intervals.icu, so a runner will never see a cycling warning and a cyclist will never see a swim warning. If something is missing, Claude will surface the specific fix steps before proceeding. - Threshold accuracy check added. When asking for a training plan or performance analysis, Claude now cross-references your configured thresholds against your actual recorded efforts. For cyclists, it compares your FTP against recent peak power data. For runners, it compares your threshold pace against recent race efforts, and your Critical Power against recent power curve data if you train by power. For swimmers, it compares your threshold pace against recent best efforts. If your settings appear significantly out of date, Claude will flag the specific value and tell you exactly where to update it. This check only runs when relevant and is skipped for simple data lookups.
3 Jun 2026
- Added direct Intervals.icu coach access. Coaches who already have coaching relationships on Intervals.icu can access all their coached athletes through Claude with no athlete setup required. Athletes do not need an IcuSync account. This is in addition to the existing IcuSync invite system, which remains unchanged. See the 23 Jun 2026 entry for setup instructions. The initial OAuth-based approach was replaced with API key auth.
26 May 2026
- Claude now checks your current training load and recovery status before recommending or creating a training plan. Get Wellness and Get Fitness are called automatically to assess ATL, CTL, and TSB so that workout prescriptions reflect your actual fatigue state rather than an assumed baseline.
- Tags are now visible to Claude. Activity tags you apply in intervals.icu (e.g. Z2, Intervals, Threshold) are now returned by
get_training_historyandget_events, so Claude can filter and analyse your training by tag.
10 May 2026
- Added
push_wellnessto write wellness data back to intervals.icu. Claude can now log daily nutrition totals (kcal, carbohydrates, protein, fat) from a food tracking source, subjective scores (fatigue, soreness, mood, motivation, stress on a 1-5 scale), body weight, and daily notes. Only the fields provided are updated. Device-synced data such as HRV, sleep, and resting HR is left untouched. - The intervals.icu OAuth connection now requests Wellness Update permission alongside the existing Wellness Read permission. Existing users need to grant this permission before push_wellness will work. You can do this by going to intervals.icu Settings, Apps, finding IcuSync and clicking edit to add the Wellness update permission. Alternatively, reconnect your intervals.icu account from the IcuSync dashboard.
4 May 2026
- Updated
get_wellnessto include carbohydrate, protein and fat intake (in grams) alongside the existing kcal field. Data is only populated if the athlete logs food in intervals.icu.
1 May 2026
- Updated
push_workoutwith day of week validation. If Claude calculates the wrong date for a given day (for example, thinking Monday is May 5 when it is actually May 4) the server catches the mismatch and returns the corrected date so it can be fixed before landing on your calendar. - IcuSync now works with ChatGPT following the addition of MCP support in ChatGPT Developer Mode. Reading training data works reliably. Creating structured workouts is supported but Claude remains the more accurate option for that. See the full comparison article for setup details and what to watch for.
23 April 2026
- Added
get_training_summaryto aggregate training stats over any date range. Returns total volume, TSS, and calories by sport, power/HR/pace zone distribution with time and percentages, and a week-by-week breakdown. Useful for block reviews, load tracking, and answering questions like “how much Z2 did I do this month”. - Weather conditions are now included in get_activity_detail when available. Temperature, feels-like, min/max temp, wind speed, wind gusts, wind direction, and headwind/tailwind percentage.
- One-click calendar subscription added to the dashboard. Once connected to Intervals.icu, your training calendar appears automatically with buttons to add it directly to Apple Calendar, Google Calendar, or Outlook. No copy-pasting required.
- Workouts pushed to your calendar via IcuSync are now automatically tagged with "icusync" in Intervals.icu. Custom tags can also be added by asking Claude (e.g. "tag this as marathon block"). To skip tagging entirely, just ask Claude not to add tags.
20 April 2026
- Added
get_extended_metricsto retrieve advanced sensor data aggregated per interval. For cyclists: core body temperature, DFA alpha1 aerobic threshold marker, W’ prime balance (energy reserve), and blood glucose. For runners: ground contact time, vertical oscillation, GCT balance, and vertical ratio. Data availability depends on the athlete’s device and sensor setup.
17 April 2026
- Intervals.icu connection now uses OAuth. New users connect with one click via the Connect with Intervals.icu button in their dashboard. No API key or Athlete ID entry required. Existing users connected via API key continue to work without any changes. If an existing user disconnects, they reconnect through OAuth. Garmin attribution added to activity data returned to Claude, in line with Garmin brand guidelines.
16 April 2026
- Added Strava activity detection. Claude now automatically identifies activities sourced via Strava and explains why detailed data may be unavailable, with guidance on how to fix it.
15 April 2026
- Added coach access, allowing athletes to invite their coach by email from the dashboard. Coaches receive a personal MCP URL and can access their athletes' training data through Claude with no IcuSync account required. Athletes control which tools to grant and can revoke access at any time. One MCP URL covers all athletes who invite the same coach email.
12 April 2026
- Added
get_power_curvesto analyse your best power output across key durations for run and ride, including CP and FTP model estimates.
11 April 2026
- Added
get_best_effortsto retrieve your personal bests directly from Intervals.icu across key distances and durations.
8 April 2026
- Added
get_wellnessto retrieve daily wellness data including sleep, HRV, resting HR, and weight.
March 2026
- Launched IcuSync with 8 tools covering training history, activity detail, fitness metrics, athlete profile, calendar events, and workout push, edit and delete.
Have feedback or questions? Join the discussion on the Intervals.icu forum.