Running workout authoring
Pace‑based reps (4:05‑4:15/km), distance or time targets, repeat groups, HR zones. One shared schema across create and update.
Author, edit, and schedule running workouts from Claude Code, Claude Desktop, Codex, or Cursor. Pace‑based intervals, repeat groups, plan‑embedded edits — plus sleep, HRV, training load, and activity exports.
$ uv tool install coros-training-mcp $ coros-mcp setup
Pace‑based reps (4:05‑4:15/km), distance or time targets, repeat groups, HR zones. One shared schema across create and update.
Clone‑and‑swap edits — change rep count, pace, or recovery without losing the calendar entry. Works for library workouts and plan‑embedded programs inside subscribed training plans.
Create from the COROS exercise catalog. Edit reps, duration, rest, or swap exercises without recreating the workout.
Sleep stages, HRV, resting HR, training load, VO2max, stamina, and activity exports (GPX, FIT, TCX, KML, CSV).
A real interaction with Claude. The human prompt maps to a single MCP tool call using the shared run‑step schema — pace parsing, repeat groups, and sensible defaults all flow from one compact JSON body.
Creating the workout now.
{ "name": "Threshold 5×1km", "steps": [ { "kind": "warmup", "target_type": "distance", "target_distance_meters": 2000 }, { "repeat": 5, "name": "Main Set", "steps": [ { "kind": "training", "target_distance_meters": 1000, "pace": "4:05-4:15/km" }, { "kind": "rest", "target_type": "time", "target_duration_seconds": 120 } ] }, { "kind": "cooldown", "target_type": "distance", "target_distance_meters": 1500 } ] }
Done — Threshold 5×1km is in your COROS library. 8.5 km total. Want me to schedule it for a specific day?
{ "workout_id": "476942…", "step_updates": [{ "step_name": "Main Set", "repeat": 6 }] }
{ "workout_id": "476943…", "happen_day": "20260428" }
Updated to 6 reps (9.5 km total) and scheduled for Tue Apr 28. Watch will pick it up on next sync.
This is a local MCP. It runs on your machine as a subprocess of your AI assistant — nothing is hosted, nothing is proxied, no third-party server sees your requests or your data.
Your COROS email and password are stored in your OS keyring
(macOS Keychain, Windows Credential Manager, Linux Secret Service),
or an AES‑encrypted file fallback. They are only ever sent over TLS
directly to teamapi.coros.com.
The MCP speaks stdio to your local assistant. There is no network listener, no inbound port, no tunnel. Traffic is outbound only, to COROS.
Zero pings home. Zero third‑party services. The repository is open source under the MIT license — every request the MCP can make is auditable in under an hour of reading.
coros-mcp uninstall removes the MCP entry from your assistants
and clears your stored credentials. Or delete the keyring entry directly —
no remote state to clean up.
$ uv tool install coros-training-mcp $ coros-mcp setup
No API key needed. The wizard asks for your COROS email, password, and region, verifies them against the COROS API, stores the token in your OS keyring, and registers the MCP with your detected AI assistants. Pre‑existing MCP entries are preserved byte‑for‑byte.
$ pipx install coros-training-mcp $ coros-mcp setup
uv tool install)$ uv tool upgrade coros-training-mcp $ coros-mcp setup --reconfigure # change creds or add assistants $ coros-mcp uninstall # remove from assistants
coros-mcp setup is a single linear wizard. Here's a real run on a
machine with Claude Code and Claude Desktop installed — you answer four
prompts, everything else is automatic.
$ coros-mcp setup Coros MCP — setup Credentials will be stored in your system keyring. ? Coros email: you@example.com ? Coros password: ●●●●●●●●●●●● ? Region: EU (teameuapi.coros.com) Verifying credentials against the EU API… ✓ Authenticated as user 458991455476662278. Mobile token was skipped and will be fetched lazily on the first sleep query. Detected 2 assistants on this machine. ? Install Coros MCP into which assistants? ◉ Claude Code (CLI) ◉ Claude Desktop Installing with command: /Users/you/.local/bin/coros-mcp serve ✓ Claude Code: installed — registered via `claude mcp add` ✓ Claude Desktop: installed — wrote ~/Library/Application Support/Claude/claude_desktop_config.json Running post-install smoke test (booting server over stdio)… ✓ Smoke test passed — coros-mcp responded to initialize OK Next steps: • Claude Desktop: restart the app so it picks up the new MCP entry. • Claude Code: ready to go — no restart needed. Try it: "What workouts do I have scheduled this week?" "What was my HRV trend over the past month?"
Total time: under a minute. Rerun with --reconfigure to add another
assistant later. The wizard never writes plaintext credentials to disk and
refuses to overwrite unparseable config files.
More prompts to throw at your assistant once installed:
Create a 5×1km threshold workout at 4:05‑4:15/km with 2‑minute jog recovery.
Change my Tuesday VO2 workout to 6 reps instead of 5.
Move Thursday's tempo run to Friday.
What was my HRV trend over the past month?
How much deep sleep and REM did I get last week?
Export my Saturday long run to GPX.
list_workouts · get_workout · create_run_workout · update_run_workout · get_run_workout_schemacreate_strength_workout · update_workout · get_strength_workout_schema · list_exercises · delete_workoutlist_scheduled_workouts · schedule_workout · move_scheduled_workout · replace_scheduled_workout · remove_scheduled_workoutget_daily_metrics · get_sleep_data · list_activities · get_activity_detail · export_activity_file