strava-mcp-agent
README.md
# strava-mcp-agent
**Your AI running coach that actually remembers.** An MCP server with persistent memory that connects your Strava data to Claude — tracking your zones, pace trends, injuries, and goals across sessions so coaching advice stays current.
---
## What it does
`strava-mcp-agent` gives Claude **18 tools** — 13 for live Strava data and 5 for persistent memory that carries context across every conversation.
### Memory & Context Tools
| Tool | Description |
|------|-------------|
| `get_athlete_context` | Loads your full training profile at conversation start — HR zones, current Z2 pace, weekly mileage trends, goals, injuries. Auto-refreshes if stale. |
| `update_athlete_profile` | Save your max HR, resting HR, weight, FTP, and custom HR zones |
| `update_athlete_goals` | Track race targets, training phase, and deadlines |
| `update_athlete_injuries` | Log injuries, update recovery status, mark as resolved |
| `add_training_note` | Persistent coaching notes across sessions (last 50 kept) |
### Strava Data Tools
| Tool | Description |
|------|-------------|
| `get_athlete` | Your profile — name, weight, FTP, bio |
| `get_athlete_stats` | All-time & recent totals for run/bike/swim |
| `list_activities` | Browse activities with date/type filtering |
| `get_activity` | Full detail for one activity (splits, HR, cadence, weather) |
| `get_activity_zones` | Heart-rate and power zone distribution |
| `get_activity_laps` | Per-lap pace, HR, and distance breakdown |
| `get_activity_streams` | Raw sensor data (GPS, HR, cadence, watts, altitude) |
| `get_starred_segments` | Your starred segments |
| `get_segment_efforts` | Efforts on a specific segment |
| `get_routes` | Routes you've created |
| `get_gear` | Shoe/bike details and mileage |
| `get_clubs` | Clubs you belong to |
| `get_running_summary` | AI-ready coaching summary (weekly mileage, pace trends, best efforts, HR stats) |
### Why memory matters
Without memory, Claude forgets everything between conversations:
- Session 1: "Your Z2 pace is 9:30/km"
- Session 2: "Your Z2 pace improved to 8:10/km"
- Session 3: "I recommend running at 9:00–9:30/km" ← **wrong**, forgot the improvement
With memory, fitness metrics are auto-computed from your Strava data and persist. Claude always knows your current zones, trends, and injuries.
---
## Quick Start (2 commands)
```bash
pip install strava-mcp-agent
strava-mcp-token
```
### Step 1: Create a Strava API app (one time)
Go to [strava.com/settings/api](https://www.strava.com/settings/api) and fill in:
| Field | What to enter |
|-------|---------------|
| **Application Name** | Anything (e.g. `My Claude MCP`) |
| **Category** | Pick any |
| **Club** | Leave blank |
| **Website** | `http://localhost` |
| **Authorization Callback Domain** | `localhost` |
> The callback domain **must** be `localhost` — this is what allows the setup wizard to receive the authorization code on your machine.
Click **Create**. On the next page, copy your **Client ID** (a number like `123456`) and **Client Secret** (a long code like `abc123def456...`).
### Step 2: Run the setup wizard
```bash
strava-mcp-token
```
It will:
1. Ask for your Client ID and Client Secret
2. Open your browser — click **Authorize** on the Strava page
3. Auto-detect your OS (macOS / Linux / Windows)
4. Find the Python that has the package installed
5. Write the Claude Desktop config file for you
### Step 3: Restart Claude Desktop
Your 18 tools are ready. To get the most out of coaching, start by telling Claude your max HR and goals:
> *"Set my max HR to 190, resting HR 48, and my goal is sub-50 10K by June"*
Claude will save this and use it to compute accurate training zones from then on.
### Manual setup (if you prefer)
<details>
<summary>Click to expand</summary>
Add to your Claude Desktop config:
- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
- **Linux**: `~/.config/Claude/claude_desktop_config.json`
```json
{
"mcpServers": {
"strava": {
"command": "strava-mcp",
"env": {
"STRAVA_CLIENT_ID": "your_client_id",
"STRAVA_CLIENT_SECRET": "your_client_secret",
"STRAVA_REFRESH_TOKEN": "your_refresh_token"
}
}
}
}
```
</details>
---
## Usage Examples
Once connected, just talk to Claude:
- *"What's my current Z2 pace and how has it changed over the last 3 months?"*
- *"My left knee is sore — adjust my training plan for this week"*
- *"Am I on track for my sub-50 10K goal?"*
- *"How was my running this month compared to last month?"*
- *"Which shoes have the most miles on them?"*
Memory is stored in `~/.strava-mcp/memory/` as plain JSON files — easy to inspect or back up.
---
## Security
Credentials are loaded from environment variables only — never hardcoded. The server uses Strava's OAuth2 refresh token flow and automatically handles token renewal.
## Requirements
- Python 3.10+
- A Strava account with API access
- Claude Desktop (or any MCP-compatible client)
## License
MIT
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues