Inspiration

I'm currently training for my first ever marathon. Having come from a competitive running background back in high school, I recognise the importance of having a bespoke training plan and a coach that truly understands your needs and circumstances.

Typical training apps do a basic Q&A to take a low-res "snapshot" of your current fitness levels, then spit out a workout structure that assumes you progress the same way as everyone else. It's no wonder people often get injured from following these rigid regimes! Also, subscription costs add up quickly, and I didn't want to stack yet another $20+ monthly subscription on top of all the ones I already have (like ChatGPT whoop whoop!).

As someone who's keenly interested in tinkering and building with agents, I got the idea to build an agentic coach to go through this marathon training journey with me. While this definitely would've worked adequately with other primitives like Google Sheets, I realised WebMCP could shift the paradigm and enable me to a beautiful, interactive workspace that both my coach agent and I can collaborate on together.

Why this is a strong fit for WebMCP

Good coaching is more than just generic advice generation. A coach needs access to the runner’s current training plan, recent workouts, personal constraints and preferences; the runner needs to understand why the coach proposes a certain training regime (i.e. provenance). Therefore, a bespoke training regime should be transparent and collaborative.

WebMCP enables the web app itself to be the shared interface between runner and agent. The agent can read canonical context and propose tweaks through purpose-built tools, while the runner can see the same evidence and review those changes in the workspace. Neither side has to rely on invisible state and/or context held only within a conversation.

How this creates a better training experience

Conversation remains the best way for a runner to describe subjective experiences such as fatigue, discomfort or a workout that was given up on. The workspace is better suited to displaying calendars, evidence and before-and-after comparisons. Your Last Coach lets each interface do what it does best.

A fresh coach agent can retrieve a structured Coaching Briefing, inspect the relevant workout(s) and preserve the runner’s feedback in their own words. Its recommendations then appear as an interactive review inside the training calendar rather than as a wall of text in chat. The runner can compare the options and explicitly approve one before anything changes.

Taken together, these make for a more collaborative and grounded coaching experience, where the runner can have full confidence that they are receiving a training plan that's truly personalised for them.

How I implemented WebMCP

I built Your Last Coach as a client-side React and TypeScript application with one authoritative workspace state shared by both the visible interface and the WebMCP tools. This prevents the agent and runner from looking at separate versions of the training plan.

The page exposes six tools covering the coaching journey:

  1. Retrieving the Coaching Briefing
  2. Reading the workout plan and any completed workout results
  3. Recording the runner’s feedback
  4. Opening a window for the runner to review plan changes
  5. Retrieving the runner’s decision.

A structured interaction contract helps a fresh agent discover the intended workflow without requiring a custom prompt or skill.

Recommendations are validated by the application and presented as two ranked options in a native review window. The plan is updated atomically when the runner presses “Adapt my plan”. The new plan version and an adaptation receipt are then available to both the runner and agent.

Challenges I ran into

As WebMCP was completely new to me at the start of this project, the main challenge was in learning about how it worked, and brainstorming how I could build my product around this emerging framework. This also forced me to consider the various trade-offs between using WebMCP versus other methods (e.g. for providing my agent with the necessary context so a fresh session can hit the ground running).

Other related challenges were around figuring out the limitations of WebMCP, particularly where it's supported at the moment, since it's still a new concept. For example, I stumbled a little when working in Codex Cloud sessions, as I did not realise that WebMCP wasn't supported in the cloud browser at the time of working on this.

Miscellaneous challenges would be, of course, managing the scope of this submission despite my lofty goals for the final product. I wanted to showcase the key features of WebMCP, without creating an overly convoluted demo product. Time was also a limiting factor here, as I had to compress most of the work into a weekend. For the challenges I faced throughout this experience, I'm pretty proud of the outcome and of myself :)

What's next for Your Last Coach

This demo currently contains synthetic data, so the obvious next step would be to incorporate real health and workout data from my fitness tracker using the COROS MCP. This will require architectural considerations around automating data egress/ingress, storage, security, etc.

In terms of features, I will likely expand the idea of "monitoring topics" as valuable slowly changing context. An early example visible in the demo app today is a topic on an ongoing shin injury. These are important for coaches to know about, but also requires careful planning around mutability, since the state of these topics changes over time, and we would not want our agent coach to plan around topics that are no longer relevant, but still are useful to keep in mind down the line.

Longer-term extensions could be around running-adjacent parts of training, such as nutrition and strength exercises. I firmly believe agent coaches are more than capable of performing at close to the level of human coaches when given the right context about the runner, and I hope to build an agent coaching system that gets me there.

Built With

Share this project:

Updates

Submission history