S-Bike Training Hub
MCPB · S-BIKE-HUB-MCP-1.12.2.MCPB · 2 COMPONENTS
Local training hub for cycling, running, swimming and lifting, with AI-led setup and planning.
Available components
Last scanned (41 minutes ago)
Scores higher than 86% of MCPB servers
Category Health and Science
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 Security0
- No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.Unverified
- Known CVEs could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).Unverified
- Install-script risk not yet assessed.Unverified
- Dependency health could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).Unverified
Provenance & Transparency48
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 10 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability78
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 17513 tokens (~141/item across 124 items; 124 tools + 0 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 Management80
- Stability observed for 24 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage92
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 77% of tool parameters carry a description.Partial
Tool Safety75
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "get_transfer" implies "transfer" and declares readOnlyHint instead, contradicting what its own name says it does. See how to fix → Fail
- An AI judge read all 125 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Unverified: 1 category
A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.
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.
- 24 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 77 to 80. That category is still filling its 30-day observation window: 23 days of observed history at the previous scan, 24 at this one. The score rises as the window fills, whether or not the server changes.
- 22 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 70 to 73. That category is still filling its 30-day observation window: 21 days of observed history at the previous scan, 22 at this one. The score rises as the window fills, whether or not the server changes.
- 20 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 63 to 67. That category is still filling its 30-day observation window: 19 days of observed history at the previous scan, 20 at this one. The score rises as the window fills, whether or not the server changes.
- 18 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 57 to 60. That category is still filling its 30-day observation window: 17 days of observed history at the previous scan, 18 at this one. The score rises as the window fills, whether or not the server changes.
- 15 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 47 to 50. That category is still filling its 30-day observation window: 14 days of observed history at the previous scan, 15 at this one. The score rises as the window fills, whether or not the server changes.
- 14 Oct 26 +37
- Injection markers: unverified → pass ▲ security
- Tool coverage: 89% → 77% ▼ functional
- Schema quality: 6202 → 17513 ▼ functional
- Stability: unverified → 0.47 ▲ functional
- MCP protocol: unverified → pass ▲ functional
- Schema quality: unverified → 100 ▲ functional
- Tool coverage: unverified → 100 ▲ functional
- Security disclosure: fail → pass ▲ functional
- Schema quality: excellent → good functional
- Package version: 1.12.0 → 1.12.2 functional
- Package version: 1.1.0 → 1.12.2 functional
- 12 Oct 26 0
- Package version: 1.1.0 → 1.12.0 functional
- Package version: 1.9.0 → 1.11.0 functional
- 10 Oct 26 0
- Package version: 1.8.0 → 1.9.0 functional
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 24 Oct 2026 · Analysed mcpb/https://github.com/JHarp199345/S-Bike-Training-Hub/releases/download/mcp-v1.12.2/s-bike-hub-mcp-1.12.2.mcpb@1.12.2
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | mcpb |
| Reason | No attestation published |
Background: How many MCP packages publish verified provenance →
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 →
save_completed_workout_to_library ~112
Save an approved completed workout of any recorded sport to the workout library. Preview save=false, then save=true. Watch readings and reports stay linked to the original activity. Changes to weights or reps keep the same movement history; changed movements create a separate routine. No new activity or calendar prescription.
| Name | Type | Req | Description |
|---|---|---|---|
| activity_id | string | yes | Imported activity ID |
| library_id | string | – | Optional selected existing movement routine ID |
| name | string | – | Optional library name |
| save | boolean | – | – |
No output schema declared.
No examples provided.
save_library_workout ~265
Keep a reviewed prescription without scheduling it. Provide the same sport, name, minutes, typed_workout and lifts/swim_recipe/ride_blocks used by workout creation. favorite true hearts it. This does not resolve a dated goal brief or add activity load.
| Name | Type | Req | Description |
|---|---|---|---|
| favorite | boolean | – | – |
| goal_difference_reviewed | boolean | – | – |
| library_id | string | – | Reuse or update this existing movement routine when movements match |
| lifts | array | – | – |
| minutes | number | – | – |
| name | string | yes | Workout name |
| ride_blocks | array | – | – |
| run_recipe | object | – | – |
| source_reviewed | boolean | – | – |
| sport | string | yes | Sport |
| steps | array | – | – |
| swim_recipe | object | – | – |
| typed_workout | object | – | – |
| workout_goals | object | – | Requested work, not activity or clearance. Strength uses weight_moved with unit lb/kg; swimming distance with unit yd/m; cycling minutes, distance_km, energy_kcal or power_low/power_high with power_s… |
| workout_import_id | string | – | Reviewed local source |
No output schema declared.
No examples provided.
save_planned_route ~88
Save a route from plan_area_route (by its cid) so it's in the rider's list; ride_now starts it on the bike at once (only when the rider asks, e.g. they're on the bike).
| Name | Type | Req | Description |
|---|---|---|---|
| cid | integer | – | The route's cid from plan_area_route |
| name | string | – | A name for it |
| ride_now | boolean | – | – |
No output schema declared.
No examples provided.
save_race_prediction ~224
Save a race prediction you made from the hub's numbers: {event: race id or date, likely, low, high (seconds or h:mm:ss), legs: {swim, t1, bike, t2, run}, basis: the numbers and assumptions used, levers: what would move it most}. Or the race result: {event, result: finishing time, legs}, which grades every prediction.
| Name | Type | Req | Description |
|---|---|---|---|
| basis | string | – | The numbers and assumptions the prediction used |
| event | string | – | The race's id or date |
| high | string | – | Slowest plausible time |
| legs | object | – | Per-leg times: swim, t1, bike, t2, run |
| levers | array | – | What would move the time most |
| likely | string | – | Most likely time (seconds or h:mm:ss) |
| low | string | – | Fastest plausible time |
| note | string | – | About the result (conditions, course) |
| result | string | – | The actual finishing time, once raced |
No output schema declared.
No examples provided.
save_run_workout ~199
Save a reviewed running recipe to one calendar session, within the existing running gate. Completed records are preserved. Preview first, then review the whole calendar and current tissue/readiness constraints.
| Name | Type | Req | Description |
|---|---|---|---|
| date | string | yes | Day as YYYY-MM-DD (default: today) |
| favorite | boolean | – | – |
| goal_difference_reviewed | boolean | – | – |
| index | integer | – | Existing running session index |
| minutes | number | yes | – |
| name | string | yes | Workout name |
| run_recipe | object | yes | – |
| typed_workout | object | – | – |
| workout_goals | object | – | Requested work, not activity or clearance. Strength uses weight_moved with unit lb/kg; swimming distance with unit yd/m; cycling minutes, distance_km, energy_kcal or power_low/power_high with power_s… |
No output schema declared.
No examples provided.
save_swim_workout ~309
Save an athlete-approved swim prescription after preview and current load/readiness review. Preserve completed sessions. With an import, visually compare the source, explain uncertainty, obtain approval, and set source_reviewed true. index edits one existing uncompleted swim instead of adding a duplicate. This is planned work, not activity logging.
| Name | Type | Req | Description |
|---|---|---|---|
| date | string | – | Day as YYYY-MM-DD (default: today) |
| favorite | boolean | – | – |
| fields | object | yes | – |
| goal_difference_reviewed | boolean | – | – |
| goal_request_id | string | – | Dated brief ID being resolved |
| index | integer | – | Existing swim session index to edit |
| minutes | number | yes | Full planned session duration |
| name | string | yes | Workout name |
| note | string | – | Purpose or coaching rationale |
| pool_length | number | – | – |
| repeats | integer | – | Whole main-section repeats |
| source_reviewed | boolean | – | Source transcription reviewed and athlete approved the prescription |
| unit | string | yes | Distance unit |
| workout_goals | object | – | Requested work, not activity or clearance. Strength uses weight_moved with unit lb/kg; swimming distance with unit yd/m; cycling minutes, distance_km, energy_kcal or power_low/power_high with power_s… |
| workout_import_id | string | – | Source draft ID, if used |
No output schema declared.
No examples provided.
save_workout_goal ~161
Save an athlete-requested dated workout brief with quantifiable sport goals. No workout, calorie burn or biological load is recorded until actual work is prescribed or completed.
| Name | Type | Req | Description |
|---|---|---|---|
| date | string | yes | Day as YYYY-MM-DD (default: today) |
| goals | object | yes | Requested work, not activity or clearance. Strength uses weight_moved with unit lb/kg; swimming distance with unit yd/m; cycling minutes, distance_km, energy_kcal or power_low/power_high with power_s… |
| name | string | yes | Brief name |
| note | string | – | Athlete preferences and phase constraints |
| sport | string | yes | Sport |
No output schema declared.
No examples provided.
schedule_route_workout ~85
Add an existing saved route to one day as a cycling prescription. Read its profile, current phase and projected whole-calendar load first. This schedules planned work, never starts the bike or fabricates completed activity.
| Name | Type | Req | Description |
|---|---|---|---|
| date | string | yes | Day as YYYY-MM-DD (default: today) |
| minutes | number | yes | – |
| route_id | string | yes | Saved route ID |
No output schema declared.
No examples provided.
schedule_test ~110
Put a test on the calendar (a plan item, not a button): ftp, diagnostic, big_gear, css, benchmark_run. Sets the day's marker, time, how-to note, and for big_gear the focus that runs it; the bike tests start from the Coach page's Ride it row. Keep the two days before an FTP or big-gear test easy.
| Name | Type | Req | Description |
|---|---|---|---|
| date | string | – | Day as YYYY-MM-DD (default: today) |
| test | string | – | Which test |
No output schema declared.
No examples provided.
schedule_test_week ~122
Plan a test week - the rider's way (from their high-school lifting program): it's also the recovery week. Easy, reduced sessions Mon-Wed so they peak on test day; swim CSS test Thu if due; morning diagnostic Fri then rest; TEST DAY Sat (FTP ramp test, or the big-gear test - one leg test a day); Sun off; training resumes Monday. Every 6 weeks; no monday = the next one due. Overwrites that week's plan.
| Name | Type | Req | Description |
|---|---|---|---|
| monday | string | – | Day as YYYY-MM-DD (default: today) |
No output schema declared.
No examples provided.
set_body_weight ~76
Record the athlete's current body weight (from today, or 'from' YYYY-MM-DD). Earlier weights are kept as dated history, so past sessions' energy keeps the weight the athlete had then.
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | – | Optional start date YYYY-MM-DD |
| unit | string | – | – |
| weight | number | yes | – |
No output schema declared.
No examples provided.
set_capacity ~133
Tune a body system's usual week (engine, impact or muscle, in load points) from how the rider's body actually responded - e.g. they handled 416 engine points like easy work (raise engine), or their feet feel overdone at 79 impact (lower impact so 79 reads 'caution'). The zones, ratio and weekly budget then use it. Say why in the note. usual_week null clears it back to the model.
| Name | Type | Req | Description |
|---|---|---|---|
| note | string | – | Why: what the rider reported |
| system | string | yes | engine, impact or muscle |
| usual_week | number|null | yes | – |
No output schema declared.
No examples provided.
set_event ~235
Add a date to plan backward from - an FTP test, a race, a goal ({date, name, kind: test|race|goal, sport: bike|run|swim|tri|other, note}) - or {remove: id}. get_today lists upcoming ones with days to go and notes (easy days before a test, taper before a race, and for running events whether the load model will have running cleared by then). Plan the days before each one around it.
| Name | Type | Req | Description |
|---|---|---|---|
| date | string | – | Day as YYYY-MM-DD (default: today) |
| distance | string | – | Triathlon: sprint, olympic, 70.3, ironman; run race: km |
| event_type | string | – | What kind of race (sets the programming) |
| kind | string | – | test, race or goal |
| name | string | – | What it is |
| note | string | – | Anything else |
| remove | string | – | An event id to remove |
| sport | string | – | bike, run, swim, tri or other |
| strokes | array | – | Swim meet events |
No output schema declared.
No examples provided.
set_lift_rule ~122
Add one of the rider's lifting rules, in their words ("No squats", "Favorite lift: incline dumbbell press", "Nothing heavy overhead - left shoulder"), or remove one (remove = the rule's text, or the exercise it excludes). 'No ...' / 'never ...' rules are enforced: plans with those exercises are refused. Every AI the rider uses reads these rules.
| Name | Type | Req | Description |
|---|---|---|---|
| note | string | – | Why, if they said |
| remove | string | – | A rule to remove |
| text | string | – | The rule |
No output schema declared.
No examples provided.
set_plan ~417
Write today's plan onto the Coach page: the verdict (go/easy/rest), your coaching note to them (plain, specific: what to ride, how it should feel, when to stop), and optionally the workout to ride (workout_id from list_workouts or a create tool).
| Name | Type | Req | Description |
|---|---|---|---|
| date | string | – | Day as YYYY-MM-DD (default: today) |
| focus | – | – | What the ride is coaching for - a cadence range plus a watt range that auto-shift steers toward: 'cadence' (65-80 rpm, zone 2: builds the cadence habit), 'grit' (50-65 rpm, 76-90% FTP: force; loads t… |
| minutes | integer | – | The time goal for the day's session |
| note | string | – | Your note to them |
| sessions | array | – | Optional ordered sessions for this day, each {sport, minutes, name, steps: [set or interval descriptions], note, workout, swim_profile, swim_plan: {stroke_mix, work_mix, purpose, why} (swim sessions)… |
| sport | string | – | The day's marker on the Coach page's week: ride, swim, run, walk, gym, test, rest, other (swims can't go on the COROS calendar - this is where they live) |
| verdict | string | – | go, easy or rest |
| workout_id | string | – | Workout to ride today (empty string clears it) |
No output schema declared.
No examples provided.
set_route_session ~243
Attach training to places on a route for a day (default today): when the rider starts that route the bridge runs it, steering auto-shift and shifting for the efforts. Segments (use climb numbers from get_route_climbs, or metres along the route): {type:'climb_time', climb:2, seconds:600, rpm?:[lo,hi]} - get up it in that time: the pace becomes a watt target, re-worked every second from what's left; {type:'efforts', climb:1 or at_m, count:3, on_s:15, off_s:180, watts:200, rpm?:[55,70]} - efforts in a big gear, shifted into at the start of each; {type:'focus', climb:3 or start_m+end_m, focus:'grit'} - a different focus for part of the route. Empty segments clear it. Results land in get_ride_story and get_climb_history.
| Name | Type | Req | Description |
|---|---|---|---|
| date | string | – | Day as YYYY-MM-DD (default: today) |
| route_id | string | – | Route id |
| segments | array | – | – |
No output schema declared.
No examples provided.
set_skill_level ~69
Move a skill ladder by hand (the coach's call): skill cadence/speed/grit/climbing/running, level 1..N, and why.
| Name | Type | Req | Description |
|---|---|---|---|
| level | integer | – | Step, from 1 |
| skill | string | – | Skill |
| why | string | – | Why |
No output schema declared.
No examples provided.
set_sport_baseline ~162
Save the athlete's own calibration for a sport when there's little recorded history: their current routine (now) and their past best (best, with when). Use the athlete's words; it is provisional until recorded weeks and reports confirm it. Ask during setup or whenever a plan looks far too easy or too hard.
| Name | Type | Req | Description |
|---|---|---|---|
| best | object | – | Past best: the same fields plus when (e.g. '2019' or 'college') |
| note | string | – | The athlete's own words about it |
| now | object | – | Current routine: sessions_per_week, weekly_km, weekly_minutes, longest_km, longest_minutes, session_km, session_minutes |
| sport | string | – | bike, run, swim or lift |
No output schema declared.
No examples provided.
set_swim_settings ~134
The rider's swim dials: the stroke mix (free, back, breast, fly out of 100), the drill share (15-30%), and whether the mix follows their race (follow_event, default true) or their dials.
| Name | Type | Req | Description |
|---|---|---|---|
| drill_share | integer | – | Percent of the session that is drill-then-swim |
| follow_event | boolean | – | – |
| mix | object | – | {free, back, breast, fly} - normalised to 100 |
| profile_id | string | – | Preferred reusable swim profile; auto chooses by phase, load, recent work and Sunday response |
No output schema declared.
No examples provided.
set_wearable_estimates ~91
Record the athlete's wearable starting estimates (VO2max, resting and maximum heart rate) for starting capacities before there is training history. Say where they came from (e.g. 'COROS fitness assessment').
| Name | Type | Req | Description |
|---|---|---|---|
| hr_max | integer | – | – |
| hr_rest | integer | – | – |
| source | string | – | Where the numbers came from |
| vo2max | number | – | – |
No output schema declared.
No examples provided.
settle_journal_flag ~124
Settle a flag the journal raised (get_checkins shows each day's flags: bone, muscle, illness, better). ONLY on their say-so in chat - never decide it for them. confirm = it's real, count it (bone/muscle read as 6/10 on their slider that day; illness makes heart & lungs easy); dismiss = it's fine; reopen = undo.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | – | What they said |
| date | string | – | Day as YYYY-MM-DD (default: today) |
| id | string | – | The flag id |
No output schema declared.
No examples provided.
start_diagnostic ~31
Start the 6-minute morning diagnostic on the bike NOW (only when he asks and is on the bike).
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
start_workout ~43
Start a workout on the bike NOW in ERG (only when he asks, e.g. he's on the bike).
| Name | Type | Req | Description |
|---|---|---|---|
| workout_id | string | yes | Workout id |
No output schema declared.
No examples provided.
update_session_explanation ~147
Update only a saved workout's plain-language reason for being in the plan. Read its explanation.context_token from get_today or get_training_calendar first. Preserve doses, steps, phase, dates and recovery gates. At check-ins review stale or misleading explanations against the actual phase, neighboring workouts and forecasts. Leave accurate text unchanged. Do not invent a heavy session, physiological benefit, or clearance.
| Name | Type | Req | Description |
|---|---|---|---|
| context_token | string | yes | Current explanation context token |
| date | string | yes | Day as YYYY-MM-DD (default: today) |
| session_index | integer | yes | Saved session index |
| text | string | yes | Short, clear reason this workout fits the plan (maximum 600 characters) |
No output schema declared.
No examples provided.
How do I install the S-Bike Training Hub MCP server?
S-Bike Training Hub ships as an MCPB bundle, a single file you download and open in an MCP host that supports MCPB bundles, such as Claude Desktop. The host reads the launch command from the bundle's own manifest, so there is no command to copy. Before opening it, check the file's SHA-256 matches the one the MCP registry declares for it, ca8750478e2a96b5084f493ea16a908619ceb0f08bc099461709d4696dc1388e; the commands to do that are on this page. If it does not match, do not open it.
mcpb · s-bike-hub-mcp-1.12.2.mcpb
Download bundleCheck the download matches the SHA-256 the MCP registry declares before you open it. If it does not match, do not open the file.
SHA-256
ca8750478e2a96b5084f493ea16a908619ceb0f08bc099461709d4696dc1388e
macOS / Linux
echo "ca8750478e2a96b5084f493ea16a908619ceb0f08bc099461709d4696dc1388e s-bike-hub-mcp-1.12.2.mcpb" | shasum -a 256 -c
Windows (PowerShell)
(Get-FileHash -Algorithm SHA256 .\s-bike-hub-mcp-1.12.2.mcpb).Hash -eq "ca8750478e2a96b5084f493ea16a908619ceb0f08bc099461709d4696dc1388e"
Run it in the folder you saved the bundle to, then open the file with an MCPB-capable host such as Claude Desktop.
What is the S-Bike Training Hub MCP server?
S-Bike Training Hub is an MCP server listed in the public MCP registry as io.github.JHarp199345/s-bike-hub. Local training hub for cycling, running, swimming and lifting, with AI-led setup and planning. This page covers its MCPB bundle (https://github.com/JHarp199345/S-Bike-Training-Hub/releases/download/mcp-v1.12.2/s-bike-hub-mcp-1.12.2.mcpb).
Is the S-Bike Training Hub MCP server safe to use?
S-Bike Training Hub scores 51 out of 100 on VerifyMCP. 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 S-Bike Training Hub MCP server expose?
S-Bike Training Hub exposes 124 tools: get_activity_report, record_activity_report, get_recorded_swim_draft, record_completed_swim_details, preview_strength_workout, and 119 more. Their descriptions and schemas cost roughly 16,952 tokens of context every time the server is loaded.
What licence is the S-Bike Training Hub MCP server under?
S-Bike Training Hub declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.