WorkoutContext.fit - Free & open-source hosted Intervals MCP server

Hi all — sharing a project I’ve been building on top of the Intervals.icu API, in case it’s useful to others here.

What it is: WorkoutContext is an MCP server — nothing more. It doesn’t have its own app, UI, or opinions about how you should train. It simply gives an MCP-capable AI assistant (Claude, today) authenticated access to your Intervals.icu account: reading your activities, wellness, sport settings, fitness numbers, and writing structured workouts, events, and NOTEs back to your calendar.

Why MCP-only matters: because there’s no coaching engine baked in, you drive the plan entirely through conversation. There’s no fixed methodology, no “our system says do 80/20,” no preset templates you have to bend to. You describe how you actually train — your periodization, your zones, your constraints, your Tuesday club run — and the assistant works within Intervals.icu to build and maintain exactly that. It adapts to you instead of the other way around:

  • Any discipline or mix — run, bike, swim, strength, triathlon, whatever.
  • Your own progression rules, recovery logic, and naming conventions.
  • Workouts written as Intervals’ DSL so they render on the chart and push to Garmin/Coros like any structured workout.
  • Plans stored as dated NOTEs on your calendar, so context carries between conversations rather than living in a separate app.

Because it’s a thin, faithful bridge to the API, it’s only as good as the API — which is why I’ve genuinely appreciated how capable and well-documented it is. (Optional extras: it can also pull in Hevy, Oura, and Withings if you connect them, but Intervals.icu is the spine.)

It’s free and open-source (github.com/agiantwhale/workoutcontext); you connect it with your Intervals.icu login at workoutcontext.fit. Auth is standard OAuth — you grant access, and can revoke it anytime.

Would love feedback from this community in particular, since you all push the API harder than most. Happy to answer questions about how it works under the hood.

4 Likes

Very interesting!
Finally, a way to connect strength training sessions recorded with Hevy to Intervals.icu.
I need to understand better. It only works with Claude at the moment, right?

1 Like

Been dabbling with this, it’s very good. Appreciate that it’s a thin layer over the intervals.icu API

Would it be possible to add a few extra fields to the EventInputShape to allow (in my case) the color and not_on_fitness_chart to be set for events? I’ve been using an llm to pull data from various sources and insert them into my intervals calendar that might affect my ability to schedule training one way or another, and I color code them depending on a few things.

Edit: end_date_local would be handy too

1 Like

Thanks for doing this!

I have connected Hevy and Intervals.icu and enabled the built-in Hevy → Intervals strength sync. Future workouts are covered, but is there a way to backfill existing Hevy workout history using the same WorkoutContext mapping, including kg_lifted, icu_rpe and icu_training_load? I already have matching Strava activities in Intervals, so ideally the backfill would update/merge rather than create duplicates.

1 Like

Works so far with Perplexity Pro it seems! Amazing!

1 Like

Hi sprouty, sorry for the late reply. This feature has been merged as of PR #155. Please refresh the tools list on your LLM client to get the latest schema.

Thanks!

Hi Nigel, I’ll investigate this within the week.

1 Like

Hi Fabriziover, any LLM client that supports MCP servers should be compatible (Claude / ChatGPT / Gemini / Muse).

Gemini only supports MCP servers through their CLI tool however.

Thank you! I did see the PR, thanks for picking this up and for the tool.

Good to see a thin bridge instead of another coaching engine, and “no opinions about how you should train” is the honest version of what most of these tools are doing behind the scenes.

One data point that keeps coming up in this category and that I can answer from experience: I run my own project against the same API, and I went through the Intervals OAuth application for it. It does get approved, and it’s worth the wait. Moving off “paste your API key into my site” removed the single biggest objection I heard from athletes before they’d even try it, and their key never touches my server now.

On the clients question above: that’s the real cost of the MCP route. It’s beautiful for whoever already has Claude or Perplexity open, and a brick wall for the runner who has neither. I went the other way — a bot, so there’s nothing to install — and I gave up the flexibility you have here to get it. Curious whether you’ve seen non-technical users make it through MCP at all, or whether it’s still mostly people who already live in these tools.

It’s hard to say actually. I mainly started this project so I could get my friends onboarded onto using Intervals.icu but they are already using AI tools frequently as part of their daily lives. My motivation isn’t to aggressively grow this tool but rather be a helpful tool that can fit into people’s existing workflows.

For people looking into a user-friendly AI interface, it seems AthleteData is a good alternative.

Yeah, that matches what I keep seeing. The people who make it through any of these setups are already comfortable with the tools, and the ones who would benefit most bounce at the first install screen. Going the bot route didn’t remove that friction, it just moved it: nothing to install, but nothing the athlete can do between messages either, and I still can’t get a non-technical runner from zero to a plan without a call.

Which is fine if the goal is fitting into existing workflows instead of growing. Free tools that stay out of the way are not something this category has too many of, and you’re right that there are plenty of people who will never read a paper but will happily ask an agent what to do on Tuesday.

I hadn’t come across AthleteData, so I’ll take a look. What I’d still want to know is what your friends do with it once the novelty is gone, because onboarding is the easy half. It’s the half I keep measuring and the one that keeps surprising me.

Here are some things I do with the tool (I’m currently using Muse)

  • Generate a training plan leading up to a race. Recalibrate plan every week depending on compliance / TSB
  • Analyze running economy metrics (eg: LSS, W/kg) to understand how cross-training (eg: strength / cycling) helps with running
  • Evaluate workout execution after every run, ensure if targets are hit correctly.
  • Plan a customized race execution plan depending on course profile

The compliance-driven recalibration is the piece I’ve stopped trusting in my own build. When someone skips Tuesday, the plan reads it as a fitness signal and eases off next week, but usually it isn’t: it’s a work trip, a sick kid, a bad week. Treat it as data and you end up writing easier and easier weeks for an athlete whose problem was never fitness. I ended up pulling those sessions out of the plan entirely and just asking what happened in plain language. Less clever, more honest.

Running economy and cross-training effects are exactly where a thin bridge beats a coaching engine, and it’s the part I gave up by building a coach instead. Mine writes the sessions to the athlete’s own Intervals calendar and tells them why; it won’t tell anyone what eight weeks of strength work did to their LSS. That’s a gap in my product, not in yours, and I’d use the tool for it.

The one thing I wouldn’t leave in the model’s hands is race execution. I’m carrying a distal biceps tendinopathy right now and mine kept programming loaded supination I can’t do, so injuries went from context to a rule it can’t argue with. A number an athlete will actually follow on race day deserves the same treatment. Zones by heart rate for me, since most people I know don’t own a power meter, and the model never writes workout syntax at all: it fills a schema and my code renders the file, so a hallucinated interval length can’t reach the watch.

You answered what you get out of it. I’d still take the second answer, the one about your friends: what happens when someone goes quiet for ten days, does the thing notice or keep writing into an empty week.

Thanks for the work! Is what i need.

1 Like