Skip to main content
Glama

Run Coach

An MCP server that pulls your Strava data and gives you a run recommendation from Claude, rendered as a dashboard.

image

What it does

  • Fetches recent activities and all-time stats from the Strava API

  • Shows them in a Prefab UI dashboard (rides, runs, distance, suffering index)

  • Has a button that sends your last N days of runs to Claude and gets back a plain-English recommendation for today's run

Related MCP server: fitness-mcp-server

Stack

  • FastMCP — the MCP server itself, with FastMCPApp for the UI-facing tools

  • Prefab — the dashboard UI, written in Python instead of JSX

  • Anthropic API — generates the run recommendation

  • httpx — talks to Strava

  • uv — dependency management and running the thing

Setup

1. Install dependencies

uv add fastmcp anthropic httpx

2. Strava API access

You need a Strava API app (create one at strava.com/settings/api) and a one-time OAuth flow to get a refresh token. Scope needs to include activity:read_all — the default read scope isn't enough.

Run the setup script (not part of the server itself) to get your first refresh_token, then it lives in strava_tokens.json.

3. Environment variables

Create a .env:

ANTHROPIC_API_KEY=sk-ant-...
STRAVA_CLIENT_ID=...
STRAVA_CLIENT_SECRET=...
STRAVA_TOKEN_PATH=./strava_tokens.json

4. Run it

uv run --env-file .env --with fastmcp fastmcp dev apps mcpserver.py --reload

Project structure

mcpserver.py       # the server: tools, UI, everything
strava_auth.py      # token refresh logic
strava_tokens.json  # your access/refresh token (gitignored)
.env                 # secrets (gitignored)

How the recommendation flow works

  1. Dashboard loads → fetches Strava data server-side, renders stats

  2. Click "Get Recommendation" → calls get_run_recommendation, a private tool the UI can hit but the model can't call directly in chat

  3. That tool re-fetches recent runs, trims to the fields that matter (distance, pace, HR, suffer score), sends them to Claude with a coaching system prompt

  4. Response comes back, gets dropped into the page via state

Considerations

  • Strava rate limits are tight (100 req/15min, 1000/day)

  • max_tokens needs headroom if thinking is ever turned on — thinking and output share the budget

F
license - not found
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer

  • MCP server giving Claude AI access to 22+ NYC public-record databases for real estate due diligence

  • MCP server for Argo RPG Platform — connects AI assistants to campaign data via OAuth2

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/GWilson97/MCP_Run_Recommender'

If you have feedback or need assistance with the MCP directory API, please join our Discord server