Model Context Protocol server

RunCoach

Exposes a runner's own training data — computed training load, race-time predictions, generated plans — as tools an LLM can call. Ask any assistant whether you should back off this week and it will produce plausible coaching advice from nothing. This makes the same question resolve against actual recorded activities, and the answer carries the specific runs it came from.

Tools

ToolAnswers
analyze_training_status“How is my training going?” — readiness read from load trend, consistency and volume, with explicit caveats
get_training_loadFitness (CTL), fatigue (ATL), form (TSB) and acute:chronic ratio over a window
predict_race_time“What could I run for X?” — with the reference efforts used and the implausible ones excluded
get_recent_activitiesRecent runs with pace, heart rate and per-activity computed load
generate_training_planA periodised plan from measured volume, or a refusal explaining why one would be unsafe

Connecting

Authentication is a bearer token — an API key issued from the Runman profile page.

{
  "mcpServers": {
    "runcoach": {
      "type": "http",
      "url": "https://runcoach-ruby.vercel.app/mcp",
      "headers": { "Authorization": "Bearer rc_live_..." }
    }
  }
}
Every tool returns a confidence and an explanation of how its number was derived, and the server instructs the model to carry both through. A prediction stated without its basis is indistinguishable from a guess.

Where the numbers come from

RunCoach reimplements nothing. Every calculation comes from @runman/core, the fixture-tested package that also backs the Runman web app, so a question asked here and the same question asked in the browser run identical code against identical data.