Skip to content
Agentmart
Submit a tool

Intervals MCP

Remote MCP server for intervals.icu run data and analysis

Connector by ljcl · GitHub account verified by the MCP Registry

IndexedMITRemote (HTTP)
Write a review

Install

Pick your client. Read the repository before you give any tool access to your data.

No install instructions from the source yet. Check the repository for setup steps.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Remote MCP server for intervals.icu run data and analysis

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.

Tools
34 read · 5 write · 1 delete
Secrets
None asked for
Install scripts
Not scanned yet
Runs as
Docker image

Tools by what they do 40

Read from the source code; the running server may list different tools.

Read 34 · Look things up without changing anything.

  • compare-activities
  • get-activity
  • get-activity-laps
  • get-activity-streams
  • get-activity-streams-raw
  • get-activity-zones
  • get-activity-zones-data
  • get-aerobic-analysis
  • get-athlete-stats
  • get-athlete-zones
  • get-best-efforts
  • get-cadence-trend-data
Show 22 more tools
  • get-compare-activities-data
  • get-fitness-trend
  • get-fitness-trend-data
  • get-hill-analysis
  • get-interval-analysis
  • get-race-prediction
  • get-route-map-data
  • get-running-dynamics
  • get-running-summary
  • get-split-analysis
  • get-training-load
  • get-training-load-data
  • get-wellness
  • list-activities
  • list-gear
  • view-activity-chart
  • view-activity-zones
  • view-cadence-trends
  • view-compare-activities
  • view-fitness-trend
  • view-route-map
  • view-training-load

Write 5 · Create, change, send or run things.

  • set-brush-window
  • set-metric
  • set-scope
  • set-view
  • set-viewport

Delete 1 · Delete, drop, revoke or wipe things.

  • update-activity

Tools (40)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • compare-activitiesCompare two activitiesread-only

    Compares two running activities side by side: pace, HR, cadence, load and running dynamics for each, the differences (activity 2 minus activity 1), and an efficiency factor per run (metres per minute per heartbeat, higher is better, grade-adjusted when both runs have GAP). Use it for the same route on two days, progress over time, or two races. A per-km table pairs the runs at the same distance (pace, HR and efficiency difference) with a verdict: constant offset (the gap is there from km 1: conditions or recovery) or growing drift (it grows: fatigue). For one run's aerobic durability, use ge…

  • get-activityActivity detailsread-only

    Returns one intervals.icu activity in detail: core metrics, training load, HR time in zone, running-dynamics averages, each WORK/RECOVERY interval, gear name, description, heart-rate recovery, and any best or threshold rise intervals.icu marked on it. Works for any sport: runs show pace per km, swims pace per 100 m, other sports speed in km/h. Use it after list-activities. For a run, prefer get-running-summary: the same detail plus cadence, HR zone and dynamics assessments and a lap table, in one call. Use get-activity-laps for lap GAP, power or elevation, and the analysis tools (get-split-a…

  • get-activity-lapsActivity lapsread-only

    Returns one intervals.icu activity's laps: distance, time, pace and grade-adjusted pace (runs), pace per 100 m (swims) or speed (other sports), HR, cadence, power, elevation gain and gradient for each lap. Works for any sport. For a run, get-running-summary already includes this lap table with the rest of the summary, and get-activity lists the same intervals with pace and HR. To judge a workout's reps, use get-interval-analysis; for even 1 km splits, get-split-analysis. Notes: - intervals.icu has no separate lap list: these are its intervals (icu_intervals), which usually match the devic…

  • get-activity-streamsActivity streamsread-only

    Returns time-series streams for one activity (heart rate, speed, cadence, altitude, GPS track, power and running dynamics), downsampled to at most maxPoints per stream, as index-aligned arrays with a unit per type. The text repeats the data as a CSV block. Use it only when you need the raw series: the analysis tools already turn streams into answers (get-split-analysis for km splits, get-hill-analysis for climbs, get-interval-analysis for reps, get-aerobic-analysis for decoupling), and view-activity-chart shows them. Ask only for the types you need: the response has a size budget, so a high …

  • get-activity-streams-rawActivity chart dataread-only

    Internal data feed for the activity chart UI: returns per-sample arrays (time, distance, heartrate, watts, velocity_smooth, altitude, cadence, grade_smooth, and running dynamics stance_time/vertical_oscillation/vertical_ratio/step_length), downsampled to about 1,000 points, plus interval bands (type, label, start/end index) as JSON for one activity. The view-activity-chart app calls this; not intended for direct model use.

  • get-activity-zonesTime in heart-rate zonesread-only

    Returns one intervals.icu activity's heart rate time in zone: time and percent in each zone, from the activity's own recorded zone bounds (not today's sport settings). For today's settings and zone ranges, use get-athlete-zones. get-activity and get-running-summary already include HR zone time. Use this tool when zones are all you need, or to compare zone distribution between activities; use view-activity-zones to show it as a chart. Notes: - Power and pace zones are not covered. - An activity with no zone data (no HR sensor, no recorded bounds) returns an empty zone_sets list and a messa…

  • get-activity-zones-dataHeart-rate zones chart dataread-only

    Internal data feed for the activity-zones UI: returns per-zone time distributions (bucket bounds, seconds, percentages) for the activity's heart rate zones as JSON. The view-activity-zones app calls this; not intended for direct model use.

  • get-aerobic-analysisAerobic analysisread-only

    Measures aerobic durability and efficiency for one activity: aerobic decoupling (the drift in output per heartbeat from the first to the second half of the moving time), the efficiency factor (metres per minute per beat on the gap and pace bases, watts per beat on the power basis) and, on the power basis, the intensity factor. Use it for long steady runs: "did my aerobic system hold up?" or "was this easy run actually easy?". To compare two runs' efficiency, use compare-activities; for pacing drift over km splits, get-split-analysis. Notes: - Decoupling under +5% is excellent, +5 to +10% mo…

  • get-athlete-statsTraining totalsread-only

    Returns training totals for this week, the last 4 weeks, this month and the year to date, in two sets. Run totals: run count, distance, moving time, elevation gain, training load and average pace. All-sports totals: count, moving time, distance and training load for each activity type, and a total for all types together. No inputs. Use it for "how much have I been running?", "how many strength sessions did I do this month?" or "how far have I swum this year?" instead of adding up list-activities. For weekly volume trends and volume-spike warnings, use get-training-load. For fitness, fatigue …

  • get-athlete-zonesZones and thresholdsread-only

    Returns the athlete's own zones and thresholds from intervals.icu sport settings, with units: LTHR, max HR, HR zones, threshold pace, pace zones and FTP. Use it for "what are my HR zones?", "is 150 bpm zone 2 for me?" or "what is my threshold pace?". It also compares LTHR and max HR with the athlete's recent heart rate bests, and says when a setting looks out of date. For the time spent in each zone on one activity, use get-activity-zones. It uses the zone bounds recorded with that activity, which can be older than these settings. Notes: - sport is an intervals.icu activity type (default Ru…

  • get-best-effortsBest effortsread-only

    Returns best times at standard running distances (400 m to marathon by default). Over your history it reads intervals.icu's pace curves for all time, the last year, the last 90 days or a custom range: "what is my fastest 5K?". With an id it searches one run instead and says where each effort starts and ends: "what was my fastest 5K inside Sunday's half?" or "my 3 fastest km today" (id "latest" is your newest run). For predicted race times or goal pacing, use get-race-prediction. For even 1 km splits of one run, use get-split-analysis. Notes: - Each time is the elapsed time across the fastes…

  • get-cadence-trend-dataCadence trends chart dataread-only

    Internal data feed for the cadence-trends UI: returns per-run summary cadence and pace for recent running activities as JSON. The view-cadence-trends app calls this; not intended for direct model use.

  • get-compare-activities-dataActivity comparison chart dataread-only

    Internal data feed for the compare-activities UI: returns the aggregate comparison (per-activity summaries, activity2−activity1 differences, efficiency analysis) as JSON. The view-compare-activities app calls this alongside get-activity-streams-raw; not intended for direct model use.

  • get-fitness-trendFitness trendread-only

    Returns fitness (CTL, a 42-day load average), fatigue (ATL, 7-day) and form (TSB, CTL minus ATL: negative is carrying fatigue, positive is fresh) day by day, and can project them forward or solve a taper. Use it for "am I fresh for Saturday?", "when does my form turn positive?", taper planning, or whether a block is digging too deep. get-wellness and get-training-load also report CTL/ATL/TSB, but only as recorded values, with no projection or taper. Use view-fitness-trend to show this as a chart. Notes: - By default CTL/ATL come straight from intervals.icu's daily wellness record, matchin…

  • get-fitness-trend-dataFitness trend chart dataread-only

    Internal data feed for the fitness-trend UI: returns the per-day CTL/ATL/TSB series, the forward projection, any solved taper plan (weekly loads and the days they produce), and the dated deep-fatigue / freshness / steep-ramp bands as JSON. The view-fitness-trend app calls this; not intended for direct model use.

Show 25 more tools
  • get-hill-analysisHill analysisread-only

    Finds the sustained climbs (at least 2% for at least 200 m) and descents in one activity, with each segment's length, grade, gain, moving and grade-adjusted pace, HR, cadence and power. The headline is early-versus-late climb drift: HR per unit of grade-adjusted speed on climbs in the first half against the second half. Positive drift means the same climbing cost more late in the run. For per-km pacing on a hilly course, use get-split-analysis; for whole-run aerobic durability, get-aerobic-analysis. Notes: - Grade comes from intervals.icu's smoothed grade stream, else from altitude over a…

  • get-interval-analysisInterval analysisread-only

    Decides whether one activity was an interval session and analyses its reps: pace, HR, cadence and power per rep, fade across reps, and a verdict with a confidence and a reasoning trail. Use it for "how did my intervals go?" or "was this a workout at all?". With findSimilar it also compares the reps with earlier sessions of the same structure: "am I getting faster at my 1 km repeats?". For laps exactly as recorded, use get-activity-laps; for continuous pacing, get-split-analysis. Notes: - Clean intervals.icu laps (icu_intervals) are preferred, and they also catch jog-recovery sessions. Con…

  • get-race-predictionRace predictionread-only

    Description is built at runtime.

  • get-route-map-dataRoute map dataread-only

    Internal data feed for the route-map UI: returns [lat, lng] coordinates from the activity's recorded GPS track plus start/end points, distance, elevation gain, and (for activities with GPS streams) index-aligned metric streams (time, distance, altitude, heartrate, watts, velocity_smooth, grade_smooth) and annotation anchors (WORK-interval end markers, caller-supplied distance-anchored waypoints) for one activity as JSON. The view-route-map app calls this; not intended for direct model use.

  • get-running-dynamicsRunning dynamicsread-only

    Returns one activity's running dynamics: ground contact time (GCT), vertical oscillation (VO), vertical ratio, step length and cadence. It gives activity averages with a within/high/low status against common targets (VO under 100 mm, GCT 200 to 260 ms), plus a row per WORK interval. get-activity and get-running-summary already show the activity averages. Use this tool for the per-interval rows and the status, for example to see whether form held up across repeats. Notes: - Vertical ratio is a value only, with no status (under about 8% is commonly called efficient). - stride_m is distance …

  • get-running-summaryRunning summaryread-only

    Returns a run-focused summary of one intervals.icu activity: get-activity's detail plus a cadence assessment, HR zone time and percent, ground contact time and vertical oscillation assessments, and the lap table. The best single call for "how was my run?". It already includes the laps and HR zone time, so skip get-activity-laps and get-activity-zones. Use get-running-dynamics for per-interval dynamics, the analysis tools (get-split-analysis, get-hill-analysis, get-interval-analysis, get-aerobic-analysis) for deeper questions, and get-activity for other sports. Notes: - Accepts Run, TrailRun…

  • get-split-analysisSplit analysisread-only

    Breaks one run into even 1 km splits (moving pace, grade-adjusted pace, elevation, grade, HR, cadence, power) and gives a two-halves pacing verdict twice, on the clock and grade-adjusted, with how many percentage points of the change the terrain explains. Use it for "did I fade?" and pacing discipline. It ignores device laps: use get-activity-laps for those and get-interval-analysis for workout reps. For climbs, use get-hill-analysis. For the fastest 1 km or 5 km anywhere in the run, not on km marks, use get-best-efforts with its id. Notes: - Halves are cut at the exact midpoint of recorded…

  • get-training-loadTraining loadread-only

    Returns weekly running volume (distance, time, elevation, run count) with a trend and volume-spike warnings, weekly intervals.icu training load, and current CTL/ATL/TSB. Use it for "how is my training volume trending?" or "am I ramping up too fast?", or with newest for a past block. For the day-by-day CTL/ATL/TSB trend, a projection or a taper plan, use get-fitness-trend. For plain totals (this week, month, year to date), use get-athlete-stats; to show weekly volume as a chart, view-training-load. Notes: - Weekly volume and warnings always count runs only (Run, TrailRun, VirtualRun). - Tr…

  • get-training-load-dataTraining load chart dataread-only

    Internal data feed for the training-load UI: returns per-week running volume (distance, runs, time, elevation), a rolling trend value, and volume-spike warning flags with reasons as JSON. The view-training-load app calls this; not intended for direct model use.

  • get-wellnessWellnessread-only

    Returns daily wellness from intervals.icu for a day or a date range: HRV (rMSSD, SDNN or both), resting HR, sleep, weight, CTL/ATL/TSB, and the subjective scores the athlete or a device logged (readiness, soreness, fatigue, stress, mood, motivation, SpO2, respiration, comments). Use it to explain how a run felt or to check recovery. For form trends, a projection or a taper, use get-fitness-trend; this tool reports each day's recorded values only. Notes: - With no date, oldest or newest, it returns today only. A range cannot exceed 90 days. - The HRV measure depends on the athlete's device…

  • list-activitiesList activitiesread-only

    Lists intervals.icu activities in a local date range, newest first. Start here: each entry carries the activity id that every per-activity tool needs, plus distance, time, pace (per km for runs, per 100 m for swims) or speed (km/h for other sports), heart rate, training load, and the types of any best or threshold rise intervals.icu marked (get-activity has the detail). For the most recent run, pass id "latest" to the per-activity tool instead of listing first; type "runs" lists runs only. search finds activities by name or #tag across all history, beyond the 366-day window (for example "wh…

  • list-gearList gearread-only

    Lists the athlete's intervals.icu gear (shoes) with total distance, activity count, retirement status and any usage reminders. Use it to see which shoes are racking up mileage, or to find a gear id for update-activity. Notes: - Retired gear is left out unless includeRetired is true. - distance_km includes any starting distance entered when the item was added, not only distance from activities.

  • set-brush-windowZoom the chart

    Zoom the activity chart's x-axis to one window of the activity, given either in kilometres from the start or in seconds of elapsed time. Use it to put the part of the run being discussed on screen — a surge, a climb, an interval — rather than describing where to look. Pass reset to show the whole activity again.

  • set-metricChange the compared metric

    Choose which metric the comparison overlays and whether its x-axis is distance or time. Only metrics both activities recorded are available.

  • set-scopeChange the fitness view

    Switch the fitness chart between whole-body load and runs only, and show or hide the fitness, fatigue, form and plan series.

  • set-viewChange the cadence view

    Description is built at runtime.

  • set-viewportFrame part of the route

    Zoom the route map to a stretch of the course, given in kilometres from the start. Use it to show the user where on the route something happens — a climb, a split, a segment — instead of only describing it. Omit both bounds and pass reset to show the whole route again.

  • update-activityUpdate activitycan change or delete data

    Updates one intervals.icu activity's name, description, gear, RPE or feel. It is the only tool that writes: confirm the change with the athlete first. To add a note, use descriptionMode "append" so the existing description stays. Notes: - Give at least one of name, description, gearId, rpe or feel. - With no descriptionMode, a call that would overwrite an existing description fails and writes nothing. - It reads the activity fresh, sends only the fields that differ in one PUT (never retried), then re-reads and echoes before and after values. - gearId is checked against the current gear l…

  • view-activity-chartActivity chartread-only

    Open an interactive chart of one activity with selectable heart rate, power, pace, altitude, cadence, and grade overlays. Prefer this over a text summary when the user wants to see or explore how metrics change over the course of an activity. Takes the activity id.

  • view-activity-zonesHeart-rate zones chartread-only

    Open an interactive time-in-zone chart for one activity: bars for the time spent in each heart rate zone, with percentages and an easy/moderate/hard split. Prefer this over the text-only get-activity-zones when the user wants to see how a workout's effort was distributed. Takes the activity id.

  • view-cadence-trendsCadence trends chartread-only

    Open an interactive cadence dashboard across recent runs: trend timeline, cadence-versus-pace scatter, pace-zone breakdown, and per-run overlay comparison. Prefer this over text when the user wants to explore cadence patterns over time. Takes a number of days of history.

  • view-compare-activitiesActivity comparison chartread-only

    Open an interactive side-by-side overlay of two activities: their pace, heart rate, power, cadence, or altitude streams aligned on a shared distance or time axis, with an aggregate delta summary. Prefer this over the text-only compare-activities when the user wants to see WHERE in the activities the difference happened. Takes both activity ids.

  • view-fitness-trendFitness trend chartread-only

    Open an interactive fitness/fatigue/form chart (the performance-management chart): fitness (CTL) and fatigue (ATL) over the lookback window with form (TSB) on its own axis, deep-fatigue, freshness, and steep-ramp periods shaded, and a dashed continuation past today. Pass targetDate to chart a solved taper landing on targetTsb on that day, week by week; omit it for a rest projection. Pass newest to chart a past block instead; it has no projection or taper. Prefer this over the text-only get-fitness-trend when the user wants to see whether they are peaking or digging a hole.

  • view-route-mapRoute mapread-only

    Open an interactive map of one activity's GPS track, fit to bounds with start and finish markers and a distance/elevation summary. Prefer this over a text summary when the user wants to see where an activity went. Takes the activity id. Optionally pin distance-anchored waypoints (fueling points, climb warnings, …) along the track via the waypoints array, useful when discussing a race plan or course guide.

  • view-training-loadTraining load chartread-only

    Open an interactive training-load chart: weekly running volume bars with a rolling trend line, and volume-spike weeks (over 1.5 times the average of the 4 weeks before) highlighted with their reason on hover. Prefer this over text when the user wants to see how their training volume is trending. Takes a number of days of history, and newest to end the chart on a past date.

Signals

Stars
0
Forks
0
Open issues
10
Last commit
Oct 18, 2026 (10 days ago)
Last release
Oct 10, 2026 (19 days ago)

From GitHub (fetched Oct 24, 2026).

Details

Registry name
io.github.ljcl/intervals-mcp
Version
2.7.0
Auth
API key
Packages
oci ghcr.io/ljcl/intervals-mcp:2.7.0
License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from ljcl

Cite this page

Intervals MCP. Agent Mart. https://agentmart.dev/connectors/ljcl-intervals-mcp (last updated 2026-10-24)