mcp-strava
# Strava MCP Server
Minimalist Strava integration for Claude.
7 focused tools. One-time auth. Zero bloat.
## What You Can Ask Claude
- "How was my training this week vs last?"
- "What's my average heart rate on tempo runs?"
- "Break down yesterday's workout by zones"
## Tools
| Tool | What it does |
| ---------------------------- | --------------------------------------------------- |
| `get_athlete_profile` | Your profile info |
| `get_athlete_stats` | Totals: recent, YTD, all-time |
| `get_athlete_zones` | HR and power zone configuration |
| `list_activities` | Browse with date filtering |
| `get_activity_detail` | Full workout breakdown with laps and segments |
| `get_activity_zones` | Zone distribution with time and percentage per zone |
| `get_segment_effort_streams` | Segment analysis with historical comparison |
## Quick Start with npx
```
1. Create Strava App → strava.com/settings/api → get Client ID + Secret
2. Authorize (one-time) → STRAVA_CLIENT_ID=xxx STRAVA_CLIENT_SECRET=xxx \
STRAVA_REDIRECT_URI=http://localhost:3000/auth/callback \
npx mcp-strava-auth
3. Configure Claude → Add to claude_desktop_config.json (see below)
4. Restart Claude → Done! Ask Claude about your workouts
```
### 1. Create Strava API Application
Visit https://www.strava.com/settings/api and create an application to get your Client ID and Secret.
### 2. Authorize with Strava (one-time setup)
Run the auth server with your Strava credentials:
```bash
STRAVA_CLIENT_ID=your_client_id STRAVA_CLIENT_SECRET=your_client_secret STRAVA_REDIRECT_URI=http://localhost:3000/auth/callback npx mcp-strava-auth
```
Then:
1. Visit `http://localhost:3000/auth/strava` in your browser
2. Authorize on Strava's page
3. You'll see "Authorization Successful!" when complete
4. The server shuts down automatically
Tokens and credentials are stored securely in `~/.strava-mcp/tokens.json`.
### 3. Configure Claude Desktop
Add to your Claude Desktop config (`claude_desktop_config.json`):
**macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
```bash
open ~/Library/Application\ Support/Claude/
```
**Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
```json
{
"mcpServers": {
"strava": {
"command": "npx",
"args": ["-y", "mcp-strava"]
}
}
}
```
### 4. Restart Claude Desktop
Restart Claude Desktop to load the MCP server.
## Manual Setup (Alternative)
If you prefer to clone and build locally:
### 1. Create Strava API Application
Visit https://www.strava.com/settings/api and create an application to get your Client ID and Secret.
### 2. Build the Project
```bash
git clone https://github.com/adrienlupo/mcp-strava.git
cd mcp-strava
npm install
npm run build
```
### 3. Authorize with Strava
Run the authorization server with your Strava credentials:
```bash
STRAVA_CLIENT_ID=your_client_id STRAVA_CLIENT_SECRET=your_client_secret STRAVA_REDIRECT_URI=http://localhost:3000/auth/callback npm run auth
```
Then:
1. Visit `http://localhost:3000/auth/strava` in your browser
2. Authorize on Strava's page
3. You'll see "Authorization Successful!" when complete
4. The server shuts down automatically
### 4. Configure Claude Desktop
Add to your Claude Desktop config (`claude_desktop_config.json`):
**macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
```bash
open ~/Library/Application\ Support/Claude/
```
**Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
```json
{
"mcpServers": {
"strava": {
"command": "node",
"args": ["/absolute/path/to/mcp-strava/dist/index.js"]
}
}
}
```
### 5. Restart Claude Desktop
Restart Claude Desktop to load the MCP server.
## Development
```bash
npm install
npm run build
npm start
```
## License
MIT
TDQS
Scored across 8 tools
Each tool has a clearly distinct purpose, covering activities, zones, athlete info, segments, and listing. Descriptions provide detailed distinctions, e.g., get_activity_zones vs get_athlete_zones are for activity-specific vs athlete-configured zones.
Almost all tools follow a consistent verb_noun pattern with snake_case (get_*, list_*). 'ping' is a slight outlier but is a common test tool and does not confuse the overall pattern.
8 tools is appropriate for a Strava integration, covering core read operations for activities, athletes, zones, and segments without being overly numerous or sparse.
The tool set covers main read operations, but there is a notable gap: get_activity_detail mentions using get_activity_streams for time-series data, yet that tool is not present. This creates a dead-end for agents. Missing write operations like upload or update activities, but those may be out of scope.