strava-mcp
An MCP server for Strava, an app for tracking physical exercise
Author
kw510
Quick Info
Actions
Tags
Model Context Protocol (MCP) Server + Strava OAuth
This is a Model Context Protocol (MCP) server that supports remote MCP connections, with Strava OAuth built-in. It allows users to connect to your MCP server by signing in with their Strava account.
Overview
The MCP server (powered by Cloudflare Workers) serves two roles: - Acts as an OAuth Server for your MCP clients - Acts as an OAuth Client for Strava's OAuth services
This project serves as a reference example for integrating OAuth providers with an MCP server deployed to Cloudflare, using the workers-oauth-provider library.
Prerequisites
- A Strava account
- A Cloudflare account
- Node.js and npm installed
- Wrangler CLI installed (
npm install -g wrangler)
Quick Start
-
Clone the repository:
bash git clone https://github.com/kw510/strava-mcp.git cd strava-mcp npm install -
Set up your Strava API credentials (see Setting Up Strava API Credentials)
-
Set up your Cloudflare KV namespace:
bash wrangler kv:namespace create "OAUTH_KV"Update thewrangler.tomlfile with the generated KV ID. -
Deploy to Cloudflare:
bash wrangler deploy
Setting Up Strava API Credentials
For Production
- Go to Strava's API Settings and create a new application
- Configure your application:
- Application Name: Choose a name for your application
- Category: Select an appropriate category
- Website: Your website URL
- Application Description: Brief description of your application
- Authorization Callback Domain:
mcp-strava-oauth.<your-subdomain>.workers.dev -
Authorization Callback URL:
https://mcp-strava-oauth.<your-subdomain>.workers.dev/callback -
Set your production environment variables:
bash wrangler secret put STRAVA_CLIENT_ID wrangler secret put STRAVA_CLIENT_SECRET
For Development
- Create a separate Strava API application for development
- Configure your development application:
- Authorization Callback Domain:
localhost -
Authorization Callback URL:
http://localhost:8788/callback -
Create a
.dev.varsfile in your project root:STRAVA_CLIENT_ID=your_development_strava_client_id STRAVA_CLIENT_SECRET=your_development_strava_client_secret
Testing Your MCP Server
Using Inspector
-
Install the Inspector tool:
bash npx @modelcontextprotocol/inspector@latest -
Connect to your server:
- For production:
https://mcp-strava-oauth.<your-subdomain>.workers.dev/sse - For development:
http://localhost:8788/sse
Using Claude Desktop
- Open Claude Desktop and go to Settings -> Developer -> Edit Config
- Add your MCP server configuration:
json { "mcpServers": { "strava": { "command": "npx", "args": [ "mcp-remote", "https://mcp-strava-oauth.<your-subdomain>.workers.dev/sse" ] } } } - Restart Claude Desktop and complete the OAuth flow
Development
Local Development
-
Start the development server:
bash wrangler dev -
The server will be available at
http://localhost:8788
API Rate Limits
The Strava API has the following rate limits: - 200 requests every 15 minutes - 2,000 requests per day
How It Works
OAuth Provider
The OAuth Provider library handles: - OAuth 2.1 server implementation - Token issuance and validation - Secure token storage in KV - Strava OAuth integration
Durable MCP
Provides:
- Persistent state management
- Secure authentication context storage
- User information access via this.props
- Conditional tool availability
MCP Remote
Enables: - Client-server communication - Tool definition and management - Request/response serialization - SSE connection maintenance
Troubleshooting
- If you see error messages in Claude Desktop, verify the connection by hovering over the 🔨 icon
- For Cursor integration, use the "Command" type and combine command and args into one string
- Ensure your callback URLs match exactly with what's configured in your Strava application
