Strava MCP Server

# Strava MCP Server A Model Context Protocol (MCP) server that provides access to the Strava API. This server enables language models to interact with Strava data, including activities, athlete information, and more. ## Features - πŸƒβ€β™‚οΈ Activity tracking and analysis - πŸ“Š Athlete statistics - πŸ—ΊοΈ Route visualization - πŸ† Achievement tracking - 🀝 Social features (kudos, comments) ## Prerequisites - Python 3.12+ - Strava API credentials - pip (Python package installer) ## Installation 1. Clone the repository: ```bash git clone https://github.com/yourusername/strava_mcp.git cd strava_mcp ``` 2. Create a virtual environment: ```bash python -m venv venv source venv/bin/activate # On Windows: .\venv\Scripts\activate ``` 3. Install dependencies: ```bash pip install -r requirements.txt ``` ## Configuration 1. Create a `config/.env` file with your Strava API credentials: ```bash STRAVA_CLIENT_ID=your_client_id STRAVA_CLIENT_SECRET=your_client_secret STRAVA_REFRESH_TOKEN=your_refresh_token ``` 2. To obtain Strava API credentials: - Go to https://www.strava.com/settings/api - Create a new application - Note down the Client ID and Client Secret - Follow the OAuth 2.0 flow to get your refresh token ## Usage ### Using with Claude Once connected, you can interact with your Strava data through Claude in various ways: #### Activity Queries - "Show me my recent activities" - "Get details about my last run" - "What was my longest ride this month?" - "Show me activities where I set personal records" - "Display the route map for my latest activity" #### Performance Analysis - "What's my average running pace this year?" - "Compare my cycling performance between last month and this month" - "Show me my heart rate zones from yesterday's workout" - "What's my total elevation gain for all activities?" - "Calculate my weekly mileage for running" #### Social Interactions - "Who gave kudos on my latest activity?" - "Show me comments on my marathon run" - "List all my club activities" - "Find activities I did with friends" #### Achievement Tracking - "List all my segment achievements" - "Show my personal records on local segments" - "What achievements did I earn this week?" - "Display my progress on yearly goals" #### Data Available Through Claude 1. Activity Details: - Distance, duration, pace - Route maps and elevation profiles - Heart rate, power, and cadence data - Splits and lap information - Weather conditions during activity 2. Athlete Statistics: - Year-to-date and all-time totals - Personal records and achievements - Training load and fitness trends - Equipment usage and maintenance 3. Social Data: - Kudos and comments - Club activities and leaderboards - Friend activities and challenges - Segment efforts and rankings 4. Route Information: - Detailed maps with elevation data - Segment analysis - Popular routes and segments - Route planning and analysis ### As an MCP Server Update your Claude Desktop configuration: ```json { "mcpServers": { "Strava": { "command": "python", "args": ["src/strava_server.py"], "cwd": "/path/to/strava_mcp", "env": { "STRAVA_CLIENT_ID": "your_client_id", "STRAVA_CLIENT_SECRET": "your_client_secret", "STRAVA_REFRESH_TOKEN": "your_refresh_token" } } } } ``` ### As an HTTP Server 1. Start the server: ```bash ./run_server.sh ``` 2. Access the API at `http://localhost:8000` Available endpoints: - GET `/activities/recent` - List recent activities - GET `/activities/{id}` - Get activity details - GET `/activities/{id}/map` - Get activity map visualization - GET `/athlete/stats` - Get athlete statistics ## Development ### Project Structure ``` strava_mcp/ β”œβ”€β”€ src/ β”‚ β”œβ”€β”€ strava_server.py # MCP server implementation β”‚ β”œβ”€β”€ strava_http_server.py # HTTP API server β”‚ β”œβ”€β”€ map_utils.py # Map visualization utilities β”‚ └── templates.py # HTML templates β”œβ”€β”€ config/ β”‚ └── .env # Environment variables (not in git) β”œβ”€β”€ requirements.txt # Python dependencies └── run_server.sh # Server startup script ``` ### Contributing 1. Fork the repository 2. Create a feature branch 3. Commit your changes 4. Push to the branch 5. Create a Pull Request ## Security - Never commit `.env` files or API credentials - The `.gitignore` file is configured to prevent sensitive data from being committed - Use environment variables for all sensitive configuration ## License This project is licensed under the MIT License - see the LICENSE file for details. ## Acknowledgments - Strava API Documentation - Model Context Protocol (MCP) Specification - Contributors and maintainers