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.

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.

+3 this week 50 Trust /100

Last scanned (22 hours ago)

Scores higher than 85% of MCPB servers

Category Health and Science

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 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 9 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 Management77
  • Stability observed for 23 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.

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.

  • 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
    • Schema quality: 6202 → 17513 ▼ functional
    • Tool coverage: 89% → 77% ▼ functional
    • Tool coverage: unverified → 100 ▲ functional
    • Schema quality: unverified → 100 ▲ functional
    • MCP protocol: unverified → pass ▲ functional
    • Stability: unverified → 0.47 ▲ 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
  • 6 Oct 26 −29
    • Tool safety: pass → unverified ▼ security
    • Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet. security
    • Capabilities: pass → unverified ▼ functional
    • Tool coverage: 100 → unverified ▼ functional
    • First check of Schema quality: unverified functional
    • Package version: 1.1.0 → 1.8.0 functional
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 23 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 →

MCP tools · 124 exposed · ~16,952 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
activate_bike_profile ~85

Make the checked profile the hub's bike - only after the check passed, the athlete felt the resistance change, and they agree. share=true returns a pre-filled GitHub link so they can share the profile and the next owner of this bike needs no assistant (ask them first).

NameTypeReqDescription
shareboolean–Return a link to share the profile (athlete's choice)

No output schema declared.

No examples provided.

apply_coaching_change ~75

Apply the exact reviewed coaching draft after explicit athlete approval. Rejects stale state, forecast violations and unresolved restrictions. Read back get_coaching_review and the calendar; this never grants running clearance.

NameTypeReqDescription
approvedbooleanyesTrue only after athlete approval
draft_idstringyesID returned by preview_coaching_change

No output schema declared.

No examples provided.

apply_program ~71

Save the exact reviewed preview by draft_id, only with athlete approval. A changed athlete state or expired draft is rejected; retries are idempotent while the draft remains available. Read back get_program and get_training_calendar afterward.

NameTypeReqDescription
draft_idstringyesID returned by preview_program; expires after six hours

No output schema declared.

No examples provided.

apply_report_snapshots ~71

Apply exactly the previewed report back-fill after the athlete approves it. Requires the preview token and approved=true; a changed ledger or record is rejected (preview again). Writes a receipt; idempotent.

NameTypeReqDescription
approvedbooleanyes–
tokenstringyesToken from preview_report_snapshots

No output schema declared.

No examples provided.

apply_running_response_model ~74

Apply exactly the reviewed selected model draft through the normal Hub API. Requires approved=true; stale evidence and wrong drafts rejected, retries idempotent. Retires block countdowns but preserves injury/protected return-to-run checks.

NameTypeReqDescription
approvedbooleanyes–
draft_idstringyesExact response model draft ID

No output schema declared.

No examples provided.

capture_bike_data ~107

Record the bike's data packets for a few seconds while the athlete pedals as you asked (e.g. label 'steady 60 rpm', then 'steady 90 rpm') so you can see which bytes follow cadence and power. Listen-only: nothing is sent to the bike. Tell the athlete what to do first.

NameTypeReqDescription
labelstring–What the athlete is doing, e.g. 'steady 90 rpm'
secondsinteger–3-30 seconds

No output schema declared.

No examples provided.

create_timed_workout ~148

Make a standard timed workout: warm-up 15%, ramp 15%, intervals 40% (split evenly), rests 20%, cool-down 10% of total_minutes. Intensities in % of FTP. Optionally make it today's ride.

NameTypeReqDescription
datestring–Day as YYYY-MM-DD (default: today)
interval_pctinteger–Interval target, % of FTP (base phase: 70-80)
intervalsinteger–Number of intervals
make_today_planboolean––
namestring–Name
rest_pctinteger–Rest target, % of FTP
total_minutesnumberyes–

No output schema declared.

No examples provided.

create_workout ~132

Make any workout from blocks, each one of: {type:'steady', minutes, pct|watts, label?}, {type:'ramp', minutes, from, to, label?} (pct of FTP), {type:'intervals', times, on:{minutes,pct}, off:{minutes,pct}}. Optionally make it today's ride.

NameTypeReqDescription
blocksarrayyes–
datestring–Day as YYYY-MM-DD (default: today)
make_today_planboolean––
namestringyesName
notestring–What it's for

No output schema declared.

No examples provided.

describe_lift_structure ~162

Describe a drafted lift session against the joint framework before planning it: each exercise's joint and group percentages, the session's blend (weighted by sets), the groups its main exercises work (a group counts from 25% of an exercise), whether the shape fits, and the session's classifiers: Type (groups), Duration (main exercises per group), Intensity (light/medium/heavy by % of each lift's estimated max, or of what was moved last time), Style, with each lift against its own last time. Give sets, reps and weight to get them. Describes; it does not judge the session or save anything.

NameTypeReqDescription
datestring–Day as YYYY-MM-DD (default: today)
exercisesarray––

No output schema declared.

No examples provided.

design_lift_session ~320

Start here to compose a lifting session inside the classifiers, in one call: Type = the groups (upper, trunk, lower), Duration = main exercises per group (1-3), Intensity = light (30-60% of the estimated max), medium (61-80%) or heavy (81-105%, as far as is safe; never maxing), Style = standard, endurance, power_explosive or power_heavy. Returns the athlete's rules, per group their lifts with the last time done and a target weight, the style's sets and reps, and the two supporting minors (sport support for the sports being built, and core alternating anti-rotation and rotation by week). Leave intensity, style or duration out and the hub recommends them from the phase and the athlete's last sessions (their reports and next-day soreness), with the reasons and those sessions listed; phase=taper also gives the volume cut (40-60%). Choose from it or search the web for exercises that fit, check with describe_lift_structure, then plan_lift_session after the athlete approves.

NameTypeReqDescription
datestring–Day as YYYY-MM-DD (default: today)
durationinteger–Main exercises per group
groupsarrayyes–
improvingarray–Sports being built (default from the program)
intensitystring–light, medium or heavy
phasestring–Lifting's role now (default from the program)
stylestring–How the weight is moved

No output schema declared.

No examples provided.

evaluate_lift_session ~97

Score a lift session before it's done: points per exercise (intensity against the estimated one-rep max, or effort for throws/bands/holds, times tempo), shared across regions, the restorative share against the steer (fits_steer), against the rider's usual, and what each region is already carrying. Use it to judge and adjust; nothing is saved.

NameTypeReqDescription
liftsarrayyesThe exercises, in order

No output schema declared.

No examples provided.

explain_training_reading ~109

Investigate a reading: implemented formula, constants, source hash, profile inputs, baseline, recorded contributors, planned doses and assumptions. Unknown is not zero; these models are provisional.

NameTypeReqDescription
datestring–Day as YYYY-MM-DD (default: today)
metricstringyesMetric key: cardio_fatigue, cardio_conditioning, impact_fatigue, muscle_fatigue, run_mechanical, run_recent, swim_recovery, strength, mechanical or lift_<region>

No output schema declared.

No examples provided.

favorite_workout ~81

Heart or unheart a library workout by id, or keep an existing scheduled workout by date and index. Prescriptions and actual activity records are preserved.

NameTypeReqDescription
datestring–Day as YYYY-MM-DD (default: today)
favoriteboolean––
idstring–Library ID
indexinteger–Existing session index

No output schema declared.

No examples provided.

get_activity_effort_windows ~84

Inspect candidate heart-rate response windows from an imported workout. Timed effort has priority, then the athlete’s duration estimate; HR rise/peak/fall is supporting uncertain evidence, not exact work timing or force. No exercise labels, assumed lag correction, or automatic logging. Ask the athlete to confirm candidates.

NameTypeReqDescription
activity_idstringyesImported watch activity ID

No output schema declared.

No examples provided.

get_activity_report ~116

Read ONE imported completed workout with watch observations and existing Hub load estimates. Swim: SWOLF, average/best distance per watch-counted stroke, pool length, stroke-specific metrics and excluded drill lengths. Run: pace, cadence, steps, available form metrics and laps. Energy rate: estimated metabolic watts and kcal/min with energy source and duration basis, separate from measured cycling power. Missing values stay unknown. Read from calendar activity_id; does not change records, load or holds.

NameTypeReqDescription
activity_idstringyesImported activity ID

No output schema declared.

No examples provided.

get_adaptation_review ~29

Read progression policy, recent decisions and unresolved localized symptoms before changing workloads. Does not change anything.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_aerobic ~116

The aerobic engine ride by ride, from the watch's ride files (the bridge is its power meter, so power and heart rate together): efficiency factor (normalized watts per beat - rises with fitness), aerobic decoupling (watts per beat, first half vs second - under 5% stayed aerobic; judged only on 40+ min steady rides), and heart rate at the same 100-120 W (falls as the heart gets fitter), with trends. Import the watch's ride files first (import_activities).

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_attention ~106

What needs going through with the athlete in the coming week, most urgent first: stop or whole-body warnings, training-rule breaks, forecast conflicts, running deloads and targets, calibration questions, missed sessions without a reason, cautions. Each item says what and the lightest fix. record_checkin returns the same list; work through it in the same conversation (preview, apply once they agree, say what changed).

NameTypeReqDescription
daysinteger–Days ahead (default 7)

No output schema declared.

No examples provided.

get_bike_setup_request ~92

When the athlete says 'get my bike working' (or their bike won't connect to the hub): read the bike setup request they queued from the hub's welcome page - the bike's Bluetooth name, services, readable values and data packets captured while they pedaled - plus step-by-step instructions, safety rules and the profile format. Start here and follow its what_to_do steps. Does not change anything.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_calibration ~118

The rider's capacities, each from tests and training with a confidence that fades after the last test: FTP (ramp test; 20-min bests between), heart rate at 90 W (morning diagnostic), big-gear 3 min (big-gear test; grit rides between), critical swim speed (400 m + 200 m time trial), and the running block (a benchmark run taken well can grow it, 10% a test). Plus which tests are coming due - put them on the calendar with schedule_test.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_capacity_review ~52

Read estimated goal demands, observed sport exposure, gaps and unresolved symptoms. Optional demands previews a read-only scenario. Does not predict finish times, calibrate limits or save a program.

NameTypeReqDescription
demandsarray––

No output schema declared.

No examples provided.

get_checkins ~41

Recent daily check-ins, diagnostics, verdicts and plans - the trend over days.

NameTypeReqDescription
daysinteger–How many days back (default 14)

No output schema declared.

No examples provided.

get_climb_history ~81

Every climb the rider has ridden on a route (or all): date, climb number, length, grade, time, average and max watts, cadence, km/h, VAM (m climbed per hour), gears used - to see progress on the same climb and set the next goal.

NameTypeReqDescription
route_idstring–Only this route (optional)

No output schema declared.

No examples provided.

get_coaching_review ~85

Read the next 1–14 days of running/lifting outlook, forecast conflicts, holds, symptoms and evidence-based capacity review candidates. Does not save or clear holds.

NameTypeReqDescription
daysinteger–Days ahead, including today
detailboolean–Every daily reading and full capacity candidates (the compact view shows readings at 80% of a limit or over)

No output schema declared.

No examples provided.

get_fitness ~58

Fitness (42-day load), fatigue (7-day), form, advice, the last 7 days' totals and the last 14 days day by day. From power, bike rides only - check COROS for runs, swims and sleep.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_guide ~68

Read the detailed rules for one kind of work before doing it: planning, capacity, rules, running, lifting, reports, checkins, workouts, races or work_rate (the server instructions list what each covers). Read once per conversation per topic.

NameTypeReqDescription
topicstringyesThe topic

No output schema declared.

No examples provided.

get_health_history ~116

The health and history records the athlete has chosen to share: the latest pre-exercise screening (ten questions following the ACSM 2015 screening logic: no doctor needed, check before vigorous training, check before starting, or pause and see a doctor), conditions, past and current injuries, medications (marked when they change heart rate) and what a doctor or physiotherapist advised. Read before planning; plan around it as the athlete's own guidance. Never diagnose, never clear anyone to exercise, never override a clinician. Local only.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_insights ~327

The rest of what the watch recorded, cross-referenced. Signals and flags only - nothing here scores the rider or changes a load model; ask the rider each flag's question rather than judging. SWIM, per set: SWOLF (seconds + strokes per length), strokes, stroke rate, pace, and how the stroke changed - held / gradual (slow fade: ordinary fatigue) / sudden (a step between neighbouring lengths - even a small one is the more telling strain signal) - plus how far in it first broke down. swim.session_length reads that across swims: use it to decide how long swims should be. Heart-rate drop in the rests is a wrist reading in water: rough. RUN: laps and 5-minute splits of power, cadence, heart rate, pace, vertical oscillation/ratio, step length, ground contact; form drift is flagged only when the pace matched. RIDE: work in kJ, heart rate in the opening minutes against the usual at those watts, heart-rate recovery in the minute after hard efforts, and (from get_aerobic) drift; ride.work_vs_legs fits kJ to the next morning's legs, ride.leg_check asks whether cadence and heart rate show the running load, ride.climbs compares each climb to the last time up. ALL: pauses mid-workout (count, time) - many of them is a question, not a fault. Trends say when they have too little data.

NameTypeReqDescription
sportstring–Only this sport: swim, run, ride, gym or walk (optional)

No output schema declared.

No examples provided.

get_library_workout ~56

Read one exact reusable prescription and its original response records. Use this after a compact get_workout_library listing, then inspect current phase and whole-calendar load before scheduling or changing it.

NameTypeReqDescription
idstringyesLibrary workout ID

No output schema declared.

No examples provided.

get_lifting ~136

Lifting and functional strength. Read before planning or scoring a gym session: the rider's RULES (never plan what a 'No ...' rule excludes; use favourites), the coaching GUIDANCE, the STEER (restorative or build, the suggested restorative share of the session and why, from the load the rider carries), sessions the rider built that are waiting for you to score (unscored_sessions), the exercise library, estimated one-rep maxes, recent sessions, the follow-up that's due, and each region's recovery block. Units: the rider's (lb or kg). All load numbers are estimates.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_lifting_framework ~194

The joint framework to plan lifting inside: six joints (shoulder, elbow, wrist, spine, hip, knee, ankle) in three groups (upper, trunk, lower), each joint's movement directions, the body regions and which joints they move, load levels (light 30-60%, medium 60-80%, heavy 80-90% of an estimated one-rep max), and the session shapes: one group with 1-3 main exercises, two or three groups with 1-6, plus up to 3 minor ones. Compose original sessions from your own exercise knowledge, giving every exercise region shares; use it for exercise ideas mid-session too, and search the web for exercises when you can. Structure only: training rules are still being written, so plan conservatively. Manual workouts are not bound by it. Read with get_lifting (the rider's rules and maxes).

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_load ~128

Training load by body system across ALL sports (runs, swims, gym, rides): ENGINE (heart/lungs; watts on the bike, heart rate calibrated to watts elsewhere), IMPACT (feet/bones; running and walking x body weight), MUSCLE (leg force; pedal torque, gym effort, running). Each has fitness, fatigue, form, the acute:chronic ratio and provisional zone, this week's used load versus the current estimated capacity, and a weakest-link readiness verdict with what's limiting. These zones are planning heuristics, not validated injury-risk thresholds. Use this before set_plan.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_load_outlook ~125

Read the plan's load outlook: recorded and projected 3-day rate, biggest day in the last 3 and 28-day load per day through the plan, phase targets (recovery 50-60% of the reference rate, taper 40-60%, build steps gated by reports), the reference basis (own 28 days, or a starting estimate for new athletes) and flags. Read-only; use it when placing or moving sessions, then preview changes as usual.

NameTypeReqDescription
daysinteger–Days ahead, 7-42 (default 21)

No output schema declared.

No examples provided.

get_milestones ~29

Streaks (days, weeks on goal), lifetime totals, milestones earned and next up.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_planning_context ~378

Start here when planning, in two passes, both on the athlete's request. scope=program (pass 1): placeholders for the whole macrocycle - sport, day, role improve or maintain, a minutes band and, for lifting, joint groups - saved with preview_program. scope=week (pass 2): the coming week's real workouts inside those placeholders, drafted with preview_coaching_change kind=calendar (its mirror compares the draft with recent weeks). Returns a brief first: at_a_glance (goal and days to it, the phase now and next, holds, reports well above their usual, each sport's usual week, calibration, health status, events), the last 7 days of reports (journals shortened), the phases or the week, the general playbook, and 'more': an index of sections. Ask for a section only when the decision needs it (sections=['volume'], sport='run'): volume, efficiency, reports in full, calibration, health_history, program, running_gate, playbook for one sport. Reason from it, explain 'why this week', show the draft, and ask: approve, regenerate, or what would you change? Apply only after approval.

NameTypeReqDescription
detailboolean–Efficiency: every session of 90 days; playbook: every sport's topics
fromstring–First day of the week to plan, YYYY-MM-DD (default today)
scopestring–program (pass 1) or week (pass 2)
sectionsarray–Leave out for the brief. Otherwise the sections to return in full: volume, efficiency, reports, calibration, health_history, program, running_gate, playbook (or ['all']).
sportstring–Only this sport in volume, efficiency, calibration and playbook

No output schema declared.

No examples provided.

get_program ~94

Read the saved macro program: goal, phases, weekly session counts and capacity notes, compact by default. detail=true returns the full phases (placements, review criteria), every week and the capacity review, which preview_program needs; phase=<label> returns one phase in full. Does not change anything.

NameTypeReqDescription
detailboolean–Full payload
phasestring–One phase in full, by label or start date

No output schema declared.

No examples provided.

get_programming ~324

Programming a swim, bike or run session: the phase (counted back from the next race: base, build, peak, taper, recovery), the rider's load state for that sport (fresh, moderate, heavy but ready, not ready), the tier cap and the suggested tier (easy, moderate, hard, very hard), and the nearest templates from the research-backed library, filled with the rider's paces (critical swim speed, FTP, a recent 5K) - each with what it trains, what it doesn't, and sources. For swimming also the stroke mix for this block (four strokes out of 100, from the race or the rider's dials), eight reusable swim_profiles with eligibility reasons, selected profile, main-set work ratios, equipment and weekly sequence context. Use swim_profile to preview another eligible module. Profiles are provisional coaching defaults; respect blocked choices. Record swim_profile and the returned swim_plan snapshot on planned swim sessions; adapt its why to the actual goal and projected load. When the sport isn't a good idea today it says why and offers mobility or another sport. Use it before writing any swim, bike or run session; adapt the template, don't invent one; keep the week's core sessions the same for 4-6 weeks and progress them. Lifting uses get_lifting.

NameTypeReqDescription
datestring–Day as YYYY-MM-DD (default: today)
sportstring–swim, bike or run
swim_profilestring–Swim profile to preview for this session; does not change saved settings

No output schema declared.

No examples provided.

get_progress_evidence ~28

Read measured training responses and evidence for improvement; modeled conditioning is not a guaranteed performance gain.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_race_predictions ~73

Race predictions so far, per race: every saved prediction (most likely time, range, legs, basis, levers), how it moved, whether a new one is due (a test since the last one, or 3+ weeks) and, after the race, how each one graded against the result.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_recent_weeks ~119

The athlete's response to the plan, week by week: planned vs done minutes against their available time, each week's phase and shape (build, consolidation, peak_volume, peak_performance, taper, race), hard sessions, and every missed session with its reason. Read it before deciding whether to build, hold, recover or taper next week. Does not change anything.

NameTypeReqDescription
datestring–Day as YYYY-MM-DD (default: today)
weeksinteger–Weeks back to include (1-12, default 4)

No output schema declared.

No examples provided.

get_rechecks ~73

Read open and recent bad-report re-checks: why each started (pain 5+, pain worse than last time, soreness well above usual), when the evening and morning re-checks are due, answers, outcome, and whether running is held or the next increase waits. Ask the athlete the due re-check questions.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_recorded_swim_draft ~75

Read watch-detected pool lengths and strokes from an imported FIT swim into an editable transcription. Drill mode is unidentified: ask which drills or kicks were performed. Flags missing lengths and mismatched totals. Does not approve, schedule, log or change load.

NameTypeReqDescription
activity_idstringyesImported swim activity ID

No output schema declared.

No examples provided.

get_recording_link_choices ~67

Read imported watch workouts or choose matching scheduled and recorded workouts for one activity. Supports every imported sport. Suggestions are not confirmed links. Read this after import_activities; the same choices appear in the manual import review.

NameTypeReqDescription
activity_idstring–Optional imported watch activity ID

No output schema declared.

No examples provided.

get_ride_story ~82

Everything about one ride (ride id like ride_2026-09-27_0959 from get_rides): stats, time in power zones, highlights, best efforts, records, workout adherence grades per part, streak, fitness.

NameTypeReqDescription
ridestringyesRide id, e.g. ride_2026-09-27_0959

No output schema declared.

No examples provided.

get_rides ~45

Recent rides: date, start, minutes, average and normalized watts, intensity (IF), training load.

NameTypeReqDescription
daysinteger–How many days back (default 7)

No output schema declared.

No examples provided.

get_route_climbs ~71

A saved route's climbs, numbered from 1: where each starts and ends (m along the route), length, gain, average and max grade - for placing climb goals and efforts with set_route_session.

NameTypeReqDescription
route_idstring–Route id from get_routes or save_planned_route

No output schema declared.

No examples provided.

get_routes ~32

The rider's saved routes: id, name, km, climbing, steepest grade, easy/mixed/hilly.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_running_recovery_review ~62

Review the single athlete running recovery time scale, rolling 42-calendar-day evidence, missing/confounded intervals, pooled candidate and validation limits. Read-only. Clean recovery needs feet/legs reports and delayed confirmation; a completed run during a hold is not clearance.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_running_response ~40

Review selected report-anchored running response, separate feet/legs observations, timing uncertainty, 90-day evidence and validation limits. No block clearance date.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_schedule_adherence ~82

Read completion, partial completion, athlete cancellations and missed sessions separately from changes to prescribed targets. Finished days only. Baseline/revisions are tracked from first observation; earlier edits are unknown. Adherence does not establish fitness improvement.

NameTypeReqDescription
datestring–Day as YYYY-MM-DD (default: today)
daysinteger–Finished days to review

No output schema declared.

No examples provided.

Install

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 bundle

Check 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.

Common questions

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 50 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.