Skip to main content
Glama
adrienlupo

mcp-strava

by adrienlupo
README.md
# 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

A4/5.0

Scored across 8 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

8 tools is appropriate for a Strava integration, covering core read operations for activities, athletes, zones, and segments without being overly numerous or sparse.

Completeness3/5

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.

Maintenance

ActivityInactive
ResponsivenessNo issues