Strava MCP Server
An MCP (Model Context Protocol) server that connects Claude to the Strava API, giving Claude direct access to your training data.
Features
- Athlete Profile — Get your Strava profile info
- Athlete Stats — Lifetime and recent totals (runs, rides, swims)
- Activities — List recent activities or filter by date range
- Activity Details — Deep dive into any single activity
- Activity Streams — Time-series data: GPS, heartrate, power, cadence, altitude
- Segments — Starred segments and segment details
Setup
1. Create a Strava API Application
- Go to strava.com/settings/api
- Create an application — set the Authorization Callback Domain to
localhost - Note your Client ID and Client Secret
2. Install & Authorize
npm install
npm run setup
The setup wizard will:
- Ask for your Client ID and Client Secret
- Open your browser to authorize with Strava
- Automatically catch the callback and exchange tokens
- Write your
.envfile
3. Build
npm run build
Manual setup (alternative)
Open this URL in your browser (replace CLIENT_ID):
https://www.strava.com/oauth/authorize?client_id=CLIENT_ID&response_type=code&redirect_uri=http://localhost&scope=read_all,activity:read_all
After authorizing, you'll be redirected to http://localhost?code=AUTHORIZATION_CODE. Copy the code and exchange it:
curl -s -X POST 'https://www.strava.com/oauth/token' \
-F 'client_id=CLIENT_ID' \
-F 'client_secret=CLIENT_SECRET' \
-F 'code=AUTHORIZATION_CODE' \
-F 'grant_type=authorization_code'
Save the refresh_token from the response and create a .env file:
STRAVA_CLIENT_ID=your_client_id
STRAVA_CLIENT_SECRET=your_client_secret
STRAVA_REFRESH_TOKEN=your_refresh_token
4. Configure Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"strava": {
"command": "node",
"args": ["/Users/USERNAME/Apps/StravaMCP/dist/index.js"],
"env": {
"STRAVA_CLIENT_ID": "your_client_id",
"STRAVA_CLIENT_SECRET": "your_client_secret",
"STRAVA_REFRESH_TOKEN": "your_refresh_token"
}
}
}
}
Restart Claude Desktop. You should see the Strava tools available in the tools menu (hammer icon).
Available Tools
| Tool | Description |
|---|---|
get_athlete | Get your Strava profile |
get_athlete_stats | Get lifetime and recent statistics |
get_activities | List recent activities (paginated) |
get_activities_between | Get all activities within a date range (auto-paginated) |
get_activity | Get detailed info for one activity |
get_activity_laps | Get lap/split data for an activity |
get_activity_zones | Get HR and power zone distribution |
get_activity_streams | Get time-series data (GPS, HR, power, etc.) |
get_starred_segments | Get your starred segments |
get_segment | Get details for a specific segment |
get_segment_efforts | Get your efforts on a segment (with optional date filter) |
Example Prompts
Once connected, try asking Claude:
- "What were my activities this week?"
- "Analyze my running performance over the past month"
- "Compare my cycling times in January vs February"
- "Show me my heartrate data from my last run"
- "What are my all-time stats?"
Development
# Run in dev mode (no build step)
npm run dev
# Build for production
npm run build
npm start
License
MIT