Local training hub for cycling, running, swimming and lifting, with AI-led setup and planning.
Runs on your machine from its package; the steps are below.

At most: creates or changes data: records, files, settings.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
uvx s-bike-training-hub
MCP client config
{
"mcpServers": {
"s-bike-training-hub": {
"command": "uvx",
"args": [
"s-bike-training-hub"
]
}
}
}Distributed as an MCP bundle (`https://github.com/JHarp199345/S-Bike-Training-Hub/releases/download/mcp-v1.11.0/s-bike-hub-mcp-1.11.0.mcpb`) — download it and import the bundle in your MCP client.
Your training, organized. Your AI assistant, informed. You just train.
A free training hub for cycling, swimming, running and strength that runs on your own computer (macOS, Windows or Linux). It keeps the record: what you planned, what you did, how hard it was, how you felt and what you missed and why. It hands that to your AI assistant, so the two of you can plan each week around how your body is actually responding. No subscription, no account, and it works with or without a smart bike.

Current version: app 1.11.0 with MCP 1.11.0 · what's new
.fit and .tcx files from COROS, Garmin and others, or have your assistant fetch them. Bike and watch recordings of the same ride count once.
The user guide tours every page.
The one-line way (macOS, Windows or Linux; needs uv). This installs the whole hub and connects it to your assistant:
claude mcp add --scope user s-bike-hub -- uvx s-bike-training-hub@latest
For Claude Desktop, add this to its config file (Settings → Developer → Edit Config), then restart Claude:
{ "mcpServers": { "s-bike-hub": { "command": "uvx", "args": ["s-bike-training-hub@latest"] } } }
If Claude Desktop can't find uvx, put its full path in "command" (run which uvx to see it). @latest makes each start check for a new version.
Then ask your assistant: "Set me up with S-Bike Training Hub." It starts the hub for you (at http://127.0.0.1:8729) and walks you through setup. Updates arrive automatically: uvx runs the latest release each time.
uvx --from s-bike-training-hub s-bike-hubuvx --from s-bike-training-hub s-bike-hub-maps~/Library/Application Support/S-Bike Hub, Windows %APPDATA%\S-Bike Hub, Linux ~/.local/share/s-bike-hub.uvx --from s-bike-training-hub s-bike-hub) so macOS can ask for Bluetooth permission. Everything except live bike control works without it.From GitHub (the full source, with setup scripts and the Desktop launcher). You need Python 3.11+.
macOS (everything, including the bike bridge, menu-bar icon, route planner and 3D maps):
git clone https://github.com/JHarp199345/S-Bike-Training-Hub.git
cd S-Bike-Training-Hub
./setup.sh # everything, with a smart bike and maps
./setup.sh --no-maps # the bike bridge without route maps
./setup.sh --no-bike # no smart bike: the coach, training records, lifting and the dashboard
Windows 10/11 (download the repository as a ZIP, or clone it, then in PowerShell in that folder):
powershell -ExecutionPolicy Bypass -File setup.ps1 # the hub and the bike bridge
powershell -ExecutionPolicy Bypass -File setup.ps1 -NoBike # no smart bike
Linux:
./setup-linux.sh # the hub, the bike bridge and map tools (needs BlueZ: sudo apt install bluez)
./setup-linux.sh --no-maps # skip the route planner and 3D maps
./setup-linux.sh --no-bike # no smart bike
Setup creates the Python environment, installs what it needs and makes a launcher: S-Bike Hub on your Desktop on macOS and Windows, ./s-bike-hub.sh on Linux. Your browser opens the hub at http://127.0.0.1:8729, starting with the welcome page. A GitHub install keeps your data in its own folder, as it always has.
The easiest way: ask your connected assistant to set you up (the welcome page has a prompt to copy). It asks for your basics, runs a short health check, asks about your sports, what you do now and what you're aiming for, then builds your program with you. You approve every step.
No assistant? On the welcome page, open No assistant? Set up by hand: your sports and experience, body weight, gender and heart rates, your running, and your rules (plain sentences that steer every workout; see Rules). Then Build my program: the hub drafts a starter program that you preview and edit before applying.
The hub keeps the record; your assistant plans with you. It works with any app that supports MCP servers.
.mcpb bundle (MCP 1.11.0) from the releases page, then Settings → Extensions → Advanced settings → Install extension. Leave the hub address at http://127.0.0.1:8729.claude mcp add --scope user s-bike-hub -- "$PWD/.venv/bin/python" "$PWD/mcp_server.py" (on Windows: .venv\Scripts\python.exe).mcp_server.py with the .venv Python.The assistant has to run on the same computer as the hub. Web-only assistants such as ChatGPT can't reach it yet.
Then talk to it: "How am I doing this week?", "I missed Tuesday, I was sick", "Plan next week around a work trip". Three built-in prompts:
On the welcome page, under Your bike: turn the bike on, pedal to wake it, disconnect it from any phone or watch app, and press Scan for my bike. Then click your bike in the list.

The hub enforces the safety rules itself: no resets, no resistance 0, only small steps within the bike's range. If it can't work out the resistance command, the bike still works for power and cadence. Details: bike setup.
Use Import watch workout on Today for .fit or .tcx files. Choose the scheduled workout it belongs to, or + New workout, and preview before saving. With a watch connector (for example COROS), your assistant can do it: "put my latest workout into the hub".
The hub records facts and labels estimates as estimates.
Your data stays on your computer. Nothing is uploaded unless you share it with an assistant or post to Strava yourself.
python tests/run_all.py # every test; macOS-only tests are skipped elsewhere
Tests run on Linux, macOS and Windows in GitHub Actions on every push, installing with each system's setup script.
Your records stay on your computer. The only outside request the hub can make is an optional air-temperature lookup for outdoor sessions, off until you turn it on: it sends a place rounded to about 10 km and a date to Open-Meteo, and caches the answer locally. A cloud AI assistant receives what you choose to share with it; a local model keeps the whole conversation on your computer.
The training figures are estimates, not medical advice or injury prediction. Check with a doctor before starting a program, and stop if something hurts. Shortness of breath or a heart-rate issue is a reason to ease off all training and get checked. The bike connection changes resistance on real equipment: keep a way to stop pedaling safely.
Built by JHarp199345 with Claude and ChatGPT. The hub stands on OpenStreetMap, Protomaps, MapLibre, BRouter, Mapzen terrain, Three.js, body-highlighter, Kenney, Quaternius and many open-source Python packages. The full list, with licenses: CREDITS.md.