Strava MCP Server
The Strava MCP Server connects Claude to the Strava API, enabling direct access to your training data for analysis and insights.
Athlete Profile & Stats (
get_athlete,get_athlete_stats): Retrieve your Strava profile and lifetime/recent statistics (total runs, rides, swims, distances)List Recent Activities (
get_activities): Browse recent activities with pagination support (up to 100 per page)Activities by Date Range (
get_activities_between): Retrieve all activities within a specific date range using ISO 8601 datesActivity Details (
get_activity): Fetch detailed information for a specific activity by IDLap/Split Data: Retrieve lap and split breakdowns for a specific activity
HR & Power Zone Distribution: Get heart rate and power zone data for an activity
Activity Streams (
get_activity_streams): Access time-series data including GPS coordinates, heart rate, power, cadence, altitude, velocity, temperature, and moreStarred Segments (
get_starred_segments): View your starred Strava segmentsSegment Details (
get_segment): Fetch detailed information about a specific segmentSegment Efforts: Access your efforts on a particular segment with optional date filtering
Provides access to Strava training data, including athlete profiles, lifetime and recent statistics, activity lists, detailed activity information, time-series data (GPS, heart rate, power, cadence, altitude), and segment details.
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 Summarize my training activities from this past week."
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
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
Related MCP server: Strava MCP Server
Setup
1. Create a Strava API Application
Go to strava.com/settings/api
Create an application — set the Authorization Callback Domain to
localhostNote your Client ID and Client Secret
2. Install & Authorize
npm install
npm run setupThe 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 buildOpen 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_allAfter 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_token4. Configure Claude Desktop
Option A: Docker (recommended)
Build the Docker image:
docker build -t strava-mcp-server .Edit ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"strava": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"--env-file", "/absolute/path/to/your/.env",
"strava-mcp-server"
]
}
}
}Replace /absolute/path/to/your/.env with the full path to your .env file.
Option B: Node.js (local)
{
"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 your Strava profile |
| Get lifetime and recent statistics |
| List recent activities (paginated) |
| Get all activities within a date range (auto-paginated) |
| Get detailed info for one activity |
| Get lap/split data for an activity |
| Get HR and power zone distribution |
| Get time-series data (GPS, HR, power, etc.) |
| Get your starred segments |
| Get details for a specific segment |
| 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 startLicense
MIT
Available Tools
8 toolsget_activitiesC
Get a list of recent Strava activities
Inputs: limit, page.
get_activities_betweenC
Get Strava activities within a specific date range
Inputs: after (required), before (required).
get_activityC
Get detailed information for a specific Strava activity by ID
Inputs: activity_id (required).
get_activity_streamsC
Get detailed time-series data (streams) for an activity: GPS coordinates, heartrate, power, cadence, altitude, etc.
Inputs: activity_id (required), stream_types.
get_athleteB
Get the profile of the authenticated Strava athlete
Inputs: no named parameters.
get_athlete_statsB
Get lifetime and recent statistics for the authenticated athlete (total runs, rides, swims, distances, etc.)
Inputs: no named parameters.
get_segmentB
Get detailed information about a specific Strava segment
Inputs: segment_id (required).
get_starred_segmentsB
Get the authenticated athlete's starred segments
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 8 tools
Each tool has a clearly distinct purpose targeting specific Strava resources: activities (list, range, detail, streams), athlete (profile, stats), and segments (detail, starred). No overlap exists in functionality, making tool selection unambiguous for an agent.
All tools follow a consistent verb_noun pattern with 'get_' prefix and descriptive suffixes (e.g., get_activities, get_activity_streams). This predictable naming convention enhances readability and agent usability throughout the set.
With 8 tools, this server is well-scoped for the Strava domain, covering core resources like activities, athlete data, and segments. Each tool earns its place by addressing distinct aspects of the API without being overwhelming or insufficient.
The tool set provides strong read-only coverage for activities, athlete, and segments, but lacks write operations (e.g., create/update activities, star segments) or broader functionality like clubs or routes. This is a notable gap that may limit agent workflows requiring full CRUD capabilities.
Maintenance
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
- AlicenseNot gradedqualityCmaintenanceConnects Claude to Strava data for natural language queries about rides, stats, and activities.8 npmMIT
- AlicenseAqualityDmaintenanceConnects Claude to your Strava account so you can query your activities, stats, routes, and segments using natural language.2724 npm1MIT