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

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A Claude MCP server that lets users query and analyze their Strava activity data by connecting to the Strava API.
    3
    Apache 2.0
  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides MCP servers for Claude to access fitness data from Strava and intervals.icu, enabling natural language queries for activity analysis, advanced training metrics, and wellness tracking.
    1

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