Strava MCP Server
Provides read-only access to a user's personal Strava data, including activities, activity streams, splits, heart-rate and power zones, and lifetime statistics.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Strava MCP Server Analyze my last week of training and summarize my fitness trends."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Strava MCP Server
A small, read-only Model Context Protocol server that gives Claude live access to your personal Strava data — activities, splits, heart-rate/pace streams, zones, and lifetime totals — so it can coach off your real training instead of manual exports.
Runs in Strava "single-player mode": it only ever connects your own account.
What it exposes
All tools are reads. The server never creates, edits, or deletes anything on Strava.
Tool | What it returns |
| Your profile (name, location, weight, FTP if set) |
| Lifetime, YTD, and last-4-weeks totals per sport |
| Recent activities, paginated, with optional date filters |
| Full detail for one activity (splits, pace, HR, power, elevation) |
| Time-series streams for detailed analysis |
| Configured heart-rate and power zones |
Related MCP server: Strava MCP Server
Prerequisites
Python 3.10+
A Strava account with an active subscription (required to create an API app)
Setup
1. Create a Strava API application
Create an app. Set Authorization Callback Domain to
localhost.Note your Client ID and Client Secret (keep the secret private).
2. Install
git clone <your-repo-url> strava-mcp-server
cd strava-mcp-server
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt3. Configure credentials
cp .env.example .env
# edit .env: set STRAVA_CLIENT_ID and STRAVA_CLIENT_SECRET4. Authorize (one time) to get a refresh token
python scripts/get_token.pyThis opens your browser, catches the redirect on localhost, exchanges the code,
and prints a STRAVA_REFRESH_TOKEN=... line. Paste it into .env.
5. Register the server with Claude
Claude Code — copy mcp.example.json to .mcp.json in the repo root (adjust
the python path to your venv, e.g. .venv/bin/python, if needed), then start
Claude Code from this directory. Approve the server when prompted.
Claude Desktop — add the strava block from mcp.example.json to your
claude_desktop_config.json under mcpServers, using absolute paths:
{
"mcpServers": {
"strava": {
"command": "/absolute/path/to/strava-mcp-server/.venv/bin/python",
"args": ["-m", "strava_mcp.server"],
"cwd": "/absolute/path/to/strava-mcp-server"
}
}
}Restart Claude Desktop. You should see the Strava tools appear.
6. Sanity check
python -m strava_mcp.server # should start and wait on stdio; Ctrl-C to exitSecurity model
No secrets in git.
.env,.strava_tokens.json, and key files are gitignored. Only.env.exampleis tracked.Read-only scope. The app requests
read,activity:read_all, andprofile:read_all— no write scopes. The server issues only GET requests to data endpoints.Token hygiene. Access tokens (6-hour lifetime) are refreshed automatically from your refresh token. Strava rotates the refresh token on each exchange; the server persists the current one to
.strava_tokens.json(chmod600, gitignored).Rate limits. Honors Strava's 200 req / 15 min and 2,000 / day limits with automatic backoff on HTTP 429.
Revoking access. Remove the app anytime at https://www.strava.com/settings/apps. Delete
.strava_tokens.jsonand.envto purge local credentials.
Publish to GitHub
From the repo root (secrets are already gitignored, so this is safe):
The GitHub repo already exists at https://github.com/esowder22/strava-mcp-server, so just wire up the remote and push:
git init
git add .
git status # confirm .env / .strava_tokens.json are NOT listed
git commit -m "Initial commit: read-only Strava MCP server"
git branch -M main
git remote add origin git@github.com:esowder22/strava-mcp-server.git
git push -u origin mainPrefer HTTPS over SSH? Use
git remote add origin https://github.com/esowder22/strava-mcp-server.git instead.
If the GitHub repo was created with a README/license and the push is rejected,
run git pull --rebase origin main once, then push again. Keep the repo
private — even though no secrets are committed, there's no reason to make it
public.
Compatibility note
Written for the current mcp 2.x SDK (where FastMCP is MCPServer), with a
fallback import so it also runs on mcp 1.x. No code change needed either way.
License
MIT — see LICENSE.
Available Tools
6 toolsget_activityB
Return full detail for one activity (splits, pace, HR, power, elevation, segments).
Inputs: activity_id (required).
get_activity_streamsA
Return time-series streams for an activity for detailed pace/HR/elevation analysis.
Args: activity_id: The activity to inspect. keys: Stream types to fetch. Defaults to time, distance, heartrate, velocity_smooth, altitude.
Inputs: activity_id (required), keys.
get_athleteA
Return the authenticated athlete's profile (name, location, weight, FTP if set).
Inputs: no named parameters.
get_athlete_zonesA
Return the athlete's configured heart-rate and power zones.
Inputs: no named parameters.
get_statsA
Return lifetime, year-to-date, and recent (last 4 weeks) totals for the athlete.
Covers run, ride, and swim distance/time/elevation. Useful for tracking load and progress over time.
Inputs: no named parameters.
list_activitiesA
List the athlete's activities, most recent first.
Args: per_page: Activities per page (1-200, default 30). page: Page number (default 1). before: Optional Unix timestamp; only activities before this time. after: Optional Unix timestamp; only activities after this time.
Inputs: page, after, before, per_page.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 6 tools
Each tool targets a clearly distinct resource or granularity: athlete profile, aggregate stats, activity list, activity detail, time-series streams, and zones. The only close pair, get_activity and get_activity_streams, is cleanly separated by summary detail vs. raw time-series data.
All tool names follow a consistent verb_noun snake_case pattern, with five using get_ and one using list_activities. The lone list_ is still a standard retrieval verb, so the naming stays predictable and coherent.
Six tools is a well-scoped size for a read-only Strava analytics server. Each tool covers a distinct part of the activity/athlete data surface without unnecessary duplication or bloat.
For the apparent purpose of retrieving athlete and activity data, the surface is complete: profile, aggregate stats, activity listing, detailed activity, streams, and zones. There are no dead ends for common queries like 'how fast was my last ride?' or 'what are my power zones?'
Related MCP Connectors
Connect Claude to your Intervals.icu watch data for fitness, workout review, and plan writing.
tri-train is a training platform for triathletes that syncs activities from Strava and Garmin and exposes them to Claude through a remote MCP server. Ask Claude how your last block went, why your run pace dropped, or whether you are fresh enough for Sunday's race, and it answers from your real data: activities with laps and grade-adjusted pace, weekly load and the performance management chart (CTL/ATL/TSB), sleep, HRV and resting heart rate, and your race calendar with predictions. Claude can also act: create and adjust planned workouts with structured intervals, push them to your Garmin watch, add races and write notes. Every change is journaled and can be undone. Read and write access are separate OAuth scopes, and the server enforces them on every call. Built and hosted in Switzerland by a triathlete; data stays on our own servers (Swiss revDSG / GDPR).
Connect Intervals.icu to Claude and ChatGPT: read training, plan workouts. Training never stored.
Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables Claude to access and analyze your Strava activities through OAuth authentication. Supports retrieving activity lists and detailed workout data for fitness tracking and analysis.2-
- AlicenseAqualityDmaintenanceConnects Claude to your Strava account for analyzing training, predicting race times, and generating periodized training plans via natural language.13125 npmISC
- AlicenseAqualityDmaintenanceConnects Claude to your Strava account so you can query your activities, stats, routes, and segments using natural language.2724 npm1MIT
- AlicenseAqualityDmaintenanceConnects Strava training data to Claude, enabling personalized coaching through analysis of training load, workout planning, gear maintenance, and power metrics.1033 PyPI1MIT