I built a read-only MCP server for Strava. It lets Claude, or any other MCP client, pull your Strava data straight into a conversation instead of you copying stats in by hand.

I wanted it mainly for running coaching conversations with Claude. Runna, which runs my training plan, doesn't have an API. Strava was the only realistic way to get real training data into the chat.

What it does

19 read-only tools. The basics: recent activities, athlete profile, stats. The more useful stuff for actual training analysis: raw per-second streams, HR and power zones, best efforts over time, lap breakdowns. Plus segments and routes.

It's built on Cloudflare Workers, with KV handling token storage and stream caching. Auth is OAuth through Strava, and there's a webhook so it knows if you ever revoke access.

Privacy

It's read-only and doesn't store anything permanently. Nothing gets used to train any model, and there's no cross-user access. It's just a pass-through between your MCP client and Strava.

Using it

There's a hosted instance at strava-mcp.mikekeefe.workers.dev/mcp, or you can self-host: clone the repo and deploy it to your own Cloudflare account.

Strava launched one too

While I was building this I'd also asked Strava for higher API rate limits and never heard back. A few weeks later they overhauled their whole developer program and launched an official Strava MCP as part of a Strava subscription.

Mine's still worth using though. It's free, self-hostable, works with any MCP client rather than being locked to Strava's own tooling, and gives full access to the stream-level data a coaching workflow actually needs.

Repo's on GitHub.