Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.hhopke/intervals-icu-mcp

PYPI · INTERVALS-ICU-MCP · SCANNED SEP 20

Read/write Intervals.icu MCP server: activities, wellness, calendar, gear, and workouts.

Available components

0 this week 81 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security100
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
  • 1 of 23 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency32
Schema Quality & AI Usability82
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 13026 tokens (~191/item across 68 items; 64 tools + 4 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management83
  • Stability observed for 25 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 4 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 65 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Install

How do I install the io.github.hhopke/intervals-icu-mcp server?

io.github.hhopke/intervals-icu-mcp runs locally as a PyPI package, launched with uvx intervals-icu-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · intervals-icu-mcp

# add to Claude Code
claude mcp add hhopke-intervals-icu-mcp -- uvx intervals-icu-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "hhopke-intervals-icu-mcp": {
      "command": "uvx",
      "args": [
        "intervals-icu-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "hhopke-intervals-icu-mcp": {
      "command": "uvx",
      "args": [
        "intervals-icu-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add hhopke-intervals-icu-mcp -- uvx intervals-icu-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "hhopke-intervals-icu-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "intervals-icu-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add hhopke-intervals-icu-mcp --command uvx --arg intervals-icu-mcp
# ~/.hermes/config.yaml
mcp_servers:
  hhopke-intervals-icu-mcp:
    command: "uvx"
    args: ["intervals-icu-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "hhopke-intervals-icu-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "intervals-icu-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add hhopke-intervals-icu-mcp -t stdio -c uvx -a intervals-icu-mcp
// mcp.json
{
  "mcpServers": {
    "hhopke-intervals-icu-mcp": {
      "command": "uvx",
      "args": [
        "intervals-icu-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 20 Sept 26 −2
    • Stability: pass → 0.83 functional
  • 19 Sept 26 0
    • Stability: 0.97 → pass security
  • 18 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 16 Sept 26 0
    • Stability: 0.87 → unverified security
    • Tool safety: pass → unverified security
    • Schema quality: 166 → 191 functional
    • Capabilities: pass → unverified functional
    • Tool coverage: 100 → unverified functional
    • Schema quality: 100 → unverified functional
    • Package version: 5.0.1 → 5.1.0 functional
  • 15 Sept 26 +16
    • Malware scan: unverified → pass security
  • 14 Sept 26 −15
    • Malware scan: pass → unverified security
  • 13 Sept 26 −2
    • Stability: pass → 0.80 functional
  • 12 Sept 26 0
    • Stability: 0.97 → pass security
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Analysed pypi/intervals-icu-mcp@5.1.0

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem pypi

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 23 packages
Packages resolved 23
Stale 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 64 exposed · ~12,674 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
icu_get_workouts_in_folder ~66

List the workouts stored in one specific library folder or training plan — name, type, structure, training load, intensity factor.

NameTypeReqDescription
athlete_idAthlete ID (for coaches managing multiple athletes)
folder_idintegeryesFolder ID to get workouts from
NameTypeReqDescription
resultstringyes

No examples provided.

icu_list_athletes ~79

List the athletes this account can access — the caller plus anyone they follow or coach. Call this FIRST whenever a request concerns someone other than the default athlete, to resolve a name to the athlete_id that other tools take. Returns each athlete's access level, so you know before calling whether a write will be permitted.

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes

No examples provided.

icu_search_activities ~121

Search activities by name or tag, returning a LIGHT result list — id, name, type, date, distance, time only. Use this first for "find my X" queries. Only escalate to search_activities_full when you specifically need power, HR, training load, or intensity-factor data on the matches (heavier payload).

NameTypeReqDescription
athlete_idAthlete ID (for coaches managing multiple athletes)
limitintegerMaximum number of results to return
querystringyesSearch query (activity name or tag)
NameTypeReqDescription
resultstringyes

No examples provided.

icu_search_activities_full ~119

Search activities by name or tag, returning FULL Activity objects with power, HR, training load, intensity factor, normalized power, weather — every metric per result. Heavy payload. Use only when the lighter search_activities won't tell you what you need (e.g. "find my threshold rides with NP above 250W").

NameTypeReqDescription
athlete_idAthlete ID (for coaches managing multiple athletes)
limitintegerMaximum number of results to return
querystringyesSearch query (activity name or tag)
NameTypeReqDescription
resultstringyes

No examples provided.

icu_search_intervals ~224

Search intervals ACROSS ALL the athlete's activities (cross-activity). Different from icu_get_activity_intervals (single-activity). Use to track progress on a workout type ("all my threshold intervals over the last year") or find comparable historical sessions. Returns the activities containing matching intervals, each with an `interval_summary` like "2x 8m 162w" (reps x duration at target).

NameTypeReqDescription
athlete_idAthlete ID (for coaches managing multiple athletes)
interval_typeInterval target type: AUTO, POWER, HR, or PACE (what the interval targeted — not the sport and not a workout-step label)
limitintegerMaximum number of matching activities to return
max_durationMaximum interval duration in seconds
max_intensityMaximum interval intensity in percent of threshold (e.g. 105)
min_durationMinimum interval duration in seconds
min_intensityMinimum interval intensity in percent of threshold (e.g. 80)
NameTypeReqDescription
resultstringyes

No examples provided.

icu_update_activity ~137

Update an existing activity's metadata (name, type, trainer flag, RPE, feel, etc.). Only fields you pass are sent; everything else stays unchanged.

NameTypeReqDescription
activity_idstringyesActivity ID to update
activity_typeUpdated activity type (e.g., Ride, Run, Swim)
commuteMark as commute
descriptionUpdated description
feelHow you felt (1-5 scale)
nameUpdated activity name
perceived_exertionRPE rating (1-10 scale)
trainerMark as trainer/indoor workout
NameTypeReqDescription
resultstringyes

No examples provided.

icu_update_activity_streams ~103

Upload raw time-series streams (power, HR, cadence, etc.) onto an existing activity. Destructive — overwrites existing stream data. Accepts JSON array or CSV. Different from get_activity_streams (READ).

NameTypeReqDescription
activity_idstringyesActivity ID to update
formatstringFormat of the payload: 'json' or 'csv'
payload_stringstringyesJSON array of stream dictionaries or raw CSV data
NameTypeReqDescription
resultstringyes

No examples provided.

icu_update_custom_item ~206

Modify an existing custom chart/field/zones/panel. Use when the user wants to change one of their existing customizations: "rename my custom field", "make this chart public". Usually need icu_get_custom_items first to find the right `item_id`. Only fields you pass are sent — others are left unchanged. For `content` schema, see intervals-icu://custom-item-schemas.

NameTypeReqDescription
athlete_idAthlete ID (for coaches managing multiple athletes)
contentUpdated configuration content (replaces existing wholesale). Same schema as create_custom_item.content — see intervals-icu://custom-item-schemas for the per-item_type shape.
descriptionUpdated description
item_idintegeryesCustom item ID to update
item_typeUpdated type (see icu_create_custom_item for values)
nameUpdated name
visibilityUpdated visibility: PRIVATE, FOLLOWERS, or PUBLIC
NameTypeReqDescription
resultstringyes

No examples provided.

icu_update_event ~734

Update an existing calendar event. Only fields you pass are sent — other fields remain unchanged. For category and training_availability semantics, see intervals-icu://event-categories. For WORKOUT `description` syntax, see intervals-icu://workout-syntax.

NameTypeReqDescription
athlete_idAthlete ID (for coaches managing multiple athletes)
colorUpdated color (hex string)
descriptionUpdated description. For WORKOUT events the server parses this into structured, device-syncable steps with zones and a training load. Use Intervals.icu workout syntax: one step per line as '- <durati…
distance_metersUpdated distance in meters
duration_secondsUpdated duration in seconds
end_dateUpdated end date (YYYY-MM-DD)
event_idintegeryesEvent ID to update
event_typeUpdated activity type
nameUpdated event name
not_on_fitness_chartHide event from the fitness chart
show_as_noteShow event as a note on the fitness chart
show_on_ctl_lineRender event on the CTL line
start_dateUpdated start date (YYYY-MM-DD)
training_availabilityUpdated training availability: NORMAL, LIMITED, or UNAVAILABLE
training_loadUpdated training load
NameTypeReqDescription
resultstringyes

No examples provided.

icu_update_gear ~101

Update an existing gear item. Only fields you pass are sent.

NameTypeReqDescription
activeFalse retires the gear (dated today); True un-retires it
athlete_idAthlete ID (for coaches managing multiple athletes)
gear_idstringyesID of the gear item to update
gear_typeUpdated type, case-insensitive (Bike, Shoes, Trainer, Chain, ...)
nameUpdated name
NameTypeReqDescription
resultstringyes

No examples provided.

icu_update_gear_reminder ~98

Update an existing gear maintenance reminder. Only fields you pass are sent.

NameTypeReqDescription
athlete_idAthlete ID (for coaches managing multiple athletes)
distance_alertUpdated distance alert in kilometers
gear_idstringyesID of the gear item
reminder_idintegeryesID of the reminder to update
textUpdated reminder text
time_alertUpdated time alert in hours
NameTypeReqDescription
resultstringyes

No examples provided.

icu_update_sport_settings ~181

Update an existing per-sport threshold record (outdoor/indoor FTP, FTHR, pace, swim).

NameTypeReqDescription
athlete_idAthlete ID (for coaches managing multiple athletes)
fthrFunctional Threshold Heart Rate in bpm
ftpFunctional Threshold Power in watts (for cycling)
indoor_ftpIndoor Functional Threshold Power in watts (for cycling)
pace_thresholdThreshold pace in min/km (e.g., 4.5 for 4:30/km)
recalc_hr_zonesbooleanRecalculate HR zones from the updated threshold heart rate
sport_idintegeryesID of the sport settings to update
swim_thresholdSwim threshold in min/100m (e.g., 1.5 for 1:30/100m)
NameTypeReqDescription
resultstringyes

No examples provided.

icu_update_wellness ~534

Upsert wellness data for ONE specific date — creates the record if missing, otherwise updates the fields you pass. Only provided fields are sent. Subjective scales (fatigue, soreness, stress, mood, motivation, injury) are 1-5. Pass `locked=True` to stop device sync from overwriting manual entries. Writes to the authenticated athlete unless athlete_id names a managed athlete.

NameTypeReqDescription
abdomenAbdominal circumference in cm
athlete_idAthlete ID (for coaches managing multiple athletes)
blood_glucoseBlood glucose in mmol/L
body_fatBody fat percentage
calories_consumedCalories consumed (kcal)
carbohydratesCarbohydrates consumed (grams)
commentsComments or notes
datestringyesDate in YYYY-MM-DD format
diastolicDiastolic blood pressure in mmHg
fat_totalTotal fat consumed (grams)
fatigueFatigue level (1-5 scale)
hrvHRV (rMSSD) value
hydrationSubjective hydration rating (1-4: 1=well hydrated, 4=very dehydrated)
hydration_litersHydration volume (liters)
injuryInjury severity (1-5 scale: 1=none, 5=severe)
lactateBlood lactate in mmol/L — lab result
lockedLock record to prevent device sync from overwriting manual entries
menstrual_phaseMenstrual phase (e.g. FOLLICULAR, OVULATING, LUTEAL, MENSTRUAL)
moodMood level (1-5 scale)
motivationMotivation level (1-5 scale)
proteinProtein consumed (grams)
readinessReadiness score (0-100)
respirationRespiration rate in breaths per minute
resting_hrResting heart rate in bpm
sleep_qualitySleep quality (1-5 scale)
sleep_secsSleep duration in seconds
sorenessSoreness level (1-5 scale)
spo2Blood oxygen saturation percentage (SpO2)
stressStress level (1-5 scale)
systolicSystolic blood pressure in mmHg
vo2maxVO2max (ml/kg/min) — lab result or device estimate
weightWeight in kg
NameTypeReqDescription
resultstringyes

No examples provided.

icu_update_workout ~752

Change fields on an EXISTING library workout — only the fields you pass are sent. To save a new workout use icu_create_workout. This edits the library workout only; calendar events are separate records changed with icu_update_event.

NameTypeReqDescription
athlete_idAthlete ID (for coaches managing multiple athletes)
colorUpdated color (hex string)
dayPLAN folders only: updated day offset from plan start
descriptionUpdated workout steps. For WORKOUT events the server parses this into structured, device-syncable steps with zones and a training load. Use Intervals.icu workout syntax: one step per line as '- <dura…
distance_metersUpdated distance in meters
duration_secondsUpdated duration in seconds
folder_idMove the workout to this folder or plan
indoorMark as an indoor workout
nameUpdated workout name
tagsReplacement tag list
targetUpdated device target type: AUTO, POWER, HR, or PACE
training_loadUpdated training load
workout_idintegeryesLibrary workout ID (from icu_get_workouts_in_folder)
workout_typeUpdated activity discipline: Ride, Run, Swim, Walk, Hike, WeightTraining, Workout, VirtualRide, VirtualRun, Other (full discipline list: intervals-icu://event-categories resource)
NameTypeReqDescription
resultstringyes

No examples provided.

Common questions

What is the io.github.hhopke/intervals-icu-mcp server?

io.github.hhopke/intervals-icu-mcp is listed in the public MCP registry as io.github.hhopke/intervals-icu-mcp. Read/write Intervals.icu MCP server: activities, wellness, calendar, gear, and workouts. This page covers its PyPI package (intervals-icu-mcp).

Is the io.github.hhopke/intervals-icu-mcp server safe to use?

io.github.hhopke/intervals-icu-mcp scores 81 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.hhopke/intervals-icu-mcp server expose?

io.github.hhopke/intervals-icu-mcp exposes 64 tools: icu_get_recent_activities, icu_get_activities_by_date, icu_get_activity_details, icu_search_activities, icu_search_activities_full, and 59 more. Their descriptions and schemas cost roughly 12,674 tokens of context every time the server is loaded.

Is the io.github.hhopke/intervals-icu-mcp server still maintained?

io.github.hhopke/intervals-icu-mcp is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.