Strava MCP Server
A Model Context Protocol (MCP) server that integrates with the Strava API, allowing AI assistants to access your Strava fitness data.
Features
- Fetch athlete profile and statistics
- List and query activities
- Access segment data and efforts
- Explore segments by geographic area
- View starred segments
Prerequisites
- Node.js 18 or higher
- A Strava account
- Strava API credentials (Client ID and Client Secret)
Installation
- Clone this repository:
git clone https://github.com/juanlarreapm/strava-mcp-server.git
cd strava-mcp-server
- Install dependencies:
npm install
- Build the project:
npm run build
Strava API Setup
Before using this server, you need to create a Strava API application:
- Go to https://www.strava.com/settings/api
- Create a new application
- Set the Authorization Callback Domain to
localhost - Note your Client ID and Client Secret
Getting OAuth Tokens
Run the authentication setup script to obtain your access tokens:
node setup-auth.cjs
This will:
- Prompt you for your Client ID and Client Secret
- Open a browser for Strava authorization
- Display your access token, refresh token, and other credentials
Keep these credentials secure - you'll need them to configure the MCP server.
Configuration
The server requires the following environment variables:
STRAVA_ACCESS_TOKEN- Your Strava access token (required)STRAVA_REFRESH_TOKEN- Your refresh token (optional, for token renewal)STRAVA_CLIENT_ID- Your Strava application Client ID (optional)STRAVA_CLIENT_SECRET- Your Strava application Client Secret (optional)
For Claude Desktop
Add this to your Claude Desktop MCP settings file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"strava": {
"command": "node",
"args": ["/path/to/strava-mcp-server/dist/index.js"],
"env": {
"STRAVA_ACCESS_TOKEN": "your_access_token_here",
"STRAVA_REFRESH_TOKEN": "your_refresh_token_here",
"STRAVA_CLIENT_ID": "your_client_id_here",
"STRAVA_CLIENT_SECRET": "your_client_secret_here"
}
}
}
}
For Other MCP Clients
Create a .env file in the project root (see .env.example):
STRAVA_ACCESS_TOKEN=your_access_token_here
STRAVA_REFRESH_TOKEN=your_refresh_token_here
STRAVA_CLIENT_ID=your_client_id_here
STRAVA_CLIENT_SECRET=your_client_secret_here
Available Tools
The server exposes the following tools:
get_athlete_profile
Get the authenticated athlete's profile information.
get_athlete_stats
Get detailed statistics including totals and recent activity counts.
list_activities
List recent activities with optional pagination and time filtering.
Parameters:
before(number): Unix timestamp to get activities before this timeafter(number): Unix timestamp to get activities after this timepage(number): Page number (default: 1)per_page(number): Items per page (default: 30, max: 200)
get_activity
Get detailed information about a specific activity.
Parameters:
id(string, required): The activity IDinclude_all_efforts(boolean): Include all segment efforts
get_segment
Get information about a specific segment.
Parameters:
id(string, required): The segment ID
list_starred_segments
List segments starred by the athlete.
Parameters:
page(number): Page numberper_page(number): Items per page
explore_segments
Explore segments in a geographic area.
Parameters:
bounds(string, required): Coordinates assw_lat,sw_lng,ne_lat,ne_lngactivity_type(string): Eitherrunningorridingmin_cat(number): Minimum climb category (0-5)max_cat(number): Maximum climb category (0-5)
get_segment_efforts
Get efforts on a specific segment.
Parameters:
segment_id(string, required): The segment IDstart_date_local(string): ISO 8601 formatted start dateend_date_local(string): ISO 8601 formatted end dateper_page(number): Items per page
Development
Build
npm run build
Watch mode
npm run watch
Run locally
npm start
Token Expiration
Strava access tokens expire after 6 hours. To handle token refresh:
- Store your refresh token securely
- Implement token refresh logic using the Strava OAuth token endpoint
- Or run
setup-auth.cjsagain to get fresh tokens
Rate Limits
Strava API has rate limits:
- 100 requests per 15 minutes
- 1000 requests per day
Plan your usage accordingly.
Troubleshooting
"STRAVA_ACCESS_TOKEN environment variable is required"
Make sure you've set the access token in your MCP configuration or environment variables.
"Strava API error: 401"
Your access token may have expired. Run setup-auth.cjs to get a new token.
"Authorization Callback Domain" error
Ensure you've set the callback domain to localhost in your Strava API settings.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
MIT License - see LICENSE file for details
