Why I Reverse-Engineered the COROS API (and Built an MCP)
My COROS Pace 3 is brilliant for following workouts at the gym, but the manual data entry in the Training Hub or COROS App is tedious. So Claude and I built an MCP server so Claude could talk to COROS's APIs. Now I just chat with Claude about what I need – my fitness level, goals, any weak points – and Claude designs a tailored strength programme. Once I'm happy with it, Claude pushes the workout straight to COROS using their full exercise catalogue (~383 exercises). It syncs to my watch automatically, no copying and pasting required.
I decided to reverse engineer the API because I noticed people didn't have much luck trying to speak with COROS directly, waiting months to hear nothing back. It felt like a problem worth solving, and it gave me an excuse to explore Claude Code agent teams, develop my intuition on how to work effectively with Claude Code, and learn more about MCPs. The first version does exactly what I set out to build.
Building it was straightforward enough. I used the just-released Claude 4.6 Opus and found the pace at which I was working fitted comfortably into the Pro plan usage limits. The code is available at https://github.com/rowlando/coros-workout-mcp/.
But like all projects, the scope is growing—in the best way. It's already opened up possibilities I hadn't anticipated. For example, progressive overload isn't factored into COROS workouts. You'd have to manually review your training data and edit each strength workout, or rely on memory (which I often do poorly). So I'm exploring how Claude could analyse my training data periodically and adapt the workouts accordingly, improving something the COROS UX doesn't currently handle well.
For the technically curious - If you're interested in how we actually built this - the reverse engineering process, the MCP architecture decisions, the tricky bits like payload construction and the calculate-then-add API flow - I've written a detailed technical breakdown: How We Built v1 of coros-workout-mcp. It covers the full journey from Chrome DevTools network captures to Claude Code implementation to Claude Desktop integration, all the way through to open-sourcing. It's a pretty good case study in human-AI pairing, if you're exploring that kind of collaboration yourself.
Yes, it does feel a bit weird saying "we".