Intervals MCP Connector (Official MCP) Beta testers needed!

That’s great. As a coach, I’m less interested in the connector writing training and more interested in recognizing trends, parsing through all the data and recognizing individual changes. The power of Intervals.icu is being able to see specific data that’s unique to each athlete. But, as a coach, looking for that data across a group of 20 that’s also often different between the athletes is the challenge.

Of course this is just one coach’s opinion! Thanks!

2 Likes

I’m wondering if I can connect this new official Intervals MCP server to my own locally developed AI agent, and not just to the official major AI agents like Claude, Codex, and Gemini?

Is there a configuration option like the one outlined here as an example:

{
  "mcpServers": {
    "intervals": {
      "type": "http",
      "url": "https://mcp.intervals.icu/mcp",
      "headers": {  # just as example
        "Authorization": "Bearer YOUR_API_KEY",
        "X-Custom-Header": "custom-value"
      }
    }
  }
}

Ok, I used the desktop app and I reproduced the same issues as you - no global connector settings, just a list of tools. no ‘always allow’.

I have been using the web app (https://gemini.google.com/customize/connectors) and that has given me all the options in both devmode and outside of devmode - I only have a plus account, nothing fancy.

I see exactly the same in the web app as the desktop app - in fact, my screenshots in dark mode are from the webapp. Even clicking your link just shows me the tools with a tick, with no options for each

1 Like

Tested it with Mistral and both reading and writing works well!

Big thanks to this awsome feature and thanks for your effort!

1 Like

How to connect to ChatGPT?

ChatGPT web app is where I tested (https://chatgpt.com/):

  1. Open Plugins (Settings, then Plugins), select +, then Add custom MCP server.
  2. Name it Intervals.icu Connector and enter this address: https://mcp.intervals.icu/mcp. Leave authentication on OAuth.
  3. Accept the risk warning, select Create as a plugin, then install it.
  4. Sign in to Intervals.icu and approve.

You need to be an Intervals.icu Supporter during the beta. If you don’t see Add custom MCP server, tell me which ChatGPT plan you’re on and I’ll look into it.

Añadida. Veo que hacer falta pagar en intervals.icu verdad? Habría alguna opción de poder conectar Google health?

1 Like

Yes, if you go to your settings page and tap the ‘Connections’ tab, you can connect Google Fit

Great to see an official connector. I’ve been tinkering on an MCP server of my own over the past months, mainly for my own training and for the handful of athletes I coach. It’s a hobby project rather than anything polished, but since coach access came up in this thread, a comparison might be of some use.

Repository: GitHub - NetworkAndSoftware/intervals-icu-mcp: MCP server for intervals.icu cycling/rowing training data · GitHub (MIT). If any of it is useful, code or ideas, please feel free to take it.

Coaching is in there. Every tool exists twice: get_activities acts on the signed-in athlete, and coach_get_activities takes an athlete_id and does the same for an athlete who has accepted the user as coach, using the coach’s own API key with the athlete’s ID in the path. coach_list_athletes gives the IDs. I went with separate tools rather than an optional parameter because Claude, Gemini and friends keep “always allow” per tool, so the user ends up approving writes to an athlete’s calendar separately from writes to their own. Tools that take an activity or event ID also fetch it first and check that the owner matches the account the tool acts on, so an ID from another athlete can’t slip through under the wrong tool’s permission. You’ll have thought about most of this already, but it may be a data point for the permission and privacy decisions you mentioned.

It runs locally over stdio (SQLite cache) and as a remote server on AWS Lambda behind a small stateless OAuth layer, so a few athletes can each connect it in their own claude.ai account. A hosted instance isn’t open to the public: whoever runs it adds each user with a command-line script, which stores their name, password and intervals.icu API key in SSM Parameter Store after checking the key against the API. Only people on that list can sign in, and the API key stays on the server. Nowhere near as neat as proper intervals.icu OAuth with scopes, of course.

For what it’s worth, here is how the two line up, going by your description as of 2 November. Corrections welcome where I’ve misread it:

Feature Official connector intervals-icu-mcp
Activities, intervals, fitness, wellness, events, zones, sport settings Yes Yes
Best efforts / power curve Yes (this season) Yes, any date range
Activity comments Yes No
Raw streams and per-window analysis (avg, NP, kJ above FTP, W′ balance) No, never recomputes Yes, analyze_activity_window; it seems to agree with the site’s figures for the rides I checked
Aggregated coaching snapshot (fitness, planned vs actual, wellness trends) Planned (daily readiness) Yes, get_coaching_context
Submax fatigue test verdict Yes No
Create, move, change, delete planned workouts and notes, with colour Yes, today or later Yes, any date
Races, sick/injured/holiday, weekly targets, season start Yes Yes
Batch changes confirmed with one yes Yes No, one call per event
Delete a completed activity Yes, with preview Yes
Upload an activity file (.fit/.gpx/.tcx) No Yes, local only
Write intervals onto an activity No Yes
Log daily wellness Yes No, read only
Set RPE and feel on an activity Yes No
Sport settings per sport (FTP, LTHR, max HR, zones) Yes Yes, plus indoor FTP, W′, Pmax
Athlete profile (weight, resting HR, height, DOB) Not mentioned Yes
Coach access to other athletes Planned Yes, every tool as coach_*
History depth 12 months, 6 per question No limit
Strava activities Marked as withheld Opaque, not flagged
Auth intervals.icu OAuth with scopes Own OAuth server in front of API keys
Confirmation of writes Server-side preview, then commit Left to the client’s per-tool permissions

A few API details I stumbled over along the way. You’ve very likely hit them already, but just in case:

  • PUT /events/{id} moves a one-day event’s end with its start but leaves a multi-day event’s end where it was, and a changed description re-parses the workout and can change the event’s type and clear its load. The server sends the current type, duration and load along with a new description to keep them.
  • Only workouts and races keep a time of day; a date with T00:00:00 makes a timed event all-day again.
  • PUT /sport-settings/{type} with a type that has no entry silently updates the Other entry, so the server resolves the numeric ID itself.
  • athlete-summary with Basic auth returns every followed athlete, which is also how coach_list_athletes works.

Happy to answer questions about any of it, and looking forward to seeing where the official one goes.

2 Likes

@Luke_Hardiman I’m also a coach and I’m 100% with everything @CoachMS said. I would be glad to test it from a coaching perspective.

2 Likes

This is great. Thankyou.

I received the following exception list from Claude when I asked it to test the Connector.
I’ve provided it to inform your tweaking of the Connector (not b/c I’m expecting a fix).

'Fatigue - Subjective is a custom Wellness field I’ve created.

"What it doesn’t give me

  • Your daily “Fatigue – Subjective” rating doesn’t come through, so please keep telling me that in chat.
  • HRRc and W′ drop don’t appear in what I can pull. For those two KPIs I’d still need a CSV export now and then, or just the figures from you."
1 Like

This is great for AI, thanks!

I will feed this info to my agent (Hermes) to check if this can be more streamlined than the cron job we devised using the API Key.

1 Like

@CoachMS @Gabriel_Vargas @gofaster thank you, we will need your input soon on coaching.

We finished the initial research on coach access this week. We know what has to change on the Intervals side for a coach’s assistant to read an athlete’s data, and how consent should work so athletes stay in control of who sees what.

I can’t give a date when testing can start right now, but I’m working towards it - the connector is my main focus for the foreseeable.

A small coach test group trying the first version and telling me what’s missing will be super helpful. I’ll message you all when there’s something to try.

From other dev work I have done for coaches, the most-used output tended to be each athlete’s story over time - individual longitudinal trends for specific sessions, wellness and freshness results across weeks etc. Let me know if your own priorities are different. (comparing athlete numbers within a group or team structure etc)

@gofaster thanks your repository was helpful! we checked your four API notes against the backend and all four made sense, and one exposed a bug of our own that’s fixed in the 3 November release.

1 Like

@Franky @Cuack yes, if your agent can sign in to a remote MCP server with OAuth. The connector registers your client itself at first sign-in, so there’s no client id or secret to configure, and no custom headers.

API keys in a header aren’t accepted on the live server: sign-in is the only route, which is what keeps the consent and permission choices in the athlete’s hands.

@Cuack if Hermes can do that sign-in, you get the same tools as Claude or ChatGPT, with the previews before writes. Tell me how it goes - I think you are the first agent of that kind on the list.

1 Like

@sprouty76 thanks for the details. I am using a paid personal account and did also try VPN from the UK, desktop differed from web app for some reason.

I have to assume at this point that they will move towards providing tool settings, because this is supportive of what the MCP spec provides and in line with what other tools are doing. So we will have to keep the one preview confirmation for deletes for now, until I am proven wrong on this assumption :slight_smile:

Thanks, great list Paul. Your custom “Fatigue – Subjective” field is now built and on our staging server. I will update you when it’s in production - will be today some time.

Your assistant will read it by the name you gave it, and can log it too. Heart rate recovery and W′ drop are in the build after that.

Both will show on the release log at intervals.icu/connector/changelog when they are live.

the field is live now Paul. you will need to disconnect and reconnect to get the latest version, then try asking your assistant for it by name

Thanks Luke. I’ll probably stick to using WorkoutContext for now, until my Gemini sub runs out and I can justify changing to something a bit better.

1 Like

CONNECTED :slight_smile:

Thanks

1 Like