Fire in da houseTop Tip:Paying $100+ per month for Perplexity, MidJourney, Runway, ChatGPT and other tools is crazy - get all your AI tools in one site starting at $15 per month with Galaxy AI Fire in da houseCheck it out free

strava-mcp

MCP.Pizza Chef: kw510

Strava-mcp is an MCP server built on Cloudflare Workers that integrates Strava OAuth authentication. It enables secure user sign-in via Strava accounts for MCP clients like Claude and Cursor, facilitating seamless and secure access to Strava data within AI workflows. This server acts both as an OAuth server for MCP clients and an OAuth client for Strava, providing a robust example of OAuth integration in MCP environments.

Use This MCP server To

Enable Strava-based user authentication for MCP clients Securely connect AI tools to Strava data via OAuth Deploy MCP servers with built-in Strava OAuth on Cloudflare Workers Provide OAuth token management for Strava integrations Serve as a reference for integrating OAuth in MCP servers Allow AI models to access user Strava activity data securely

README

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

  1. Clone the repository:

    git clone https://github.com/kw510/strava-mcp.git
    cd strava-mcp
    npm install
  2. Set up your Strava API credentials (see Setting Up Strava API Credentials)

  3. Set up your Cloudflare KV namespace:

    wrangler kv:namespace create "OAUTH_KV"

    Update the wrangler.toml file with the generated KV ID.

  4. Deploy to Cloudflare:

    wrangler deploy

Setting Up Strava API Credentials

For Production

  1. Go to Strava's API Settings and create a new application

  2. 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
  3. Set your production environment variables:

    wrangler secret put STRAVA_CLIENT_ID
    wrangler secret put STRAVA_CLIENT_SECRET

For Development

  1. Create a separate Strava API application for development

  2. Configure your development application:

    • Authorization Callback Domain: localhost
    • Authorization Callback URL: http://localhost:8788/callback
  3. Create a .dev.vars file 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

  1. Install the Inspector tool:

    npx @modelcontextprotocol/inspector@latest
  2. Connect to your server:

    • For production: https://mcp-strava-oauth.<your-subdomain>.workers.dev/sse
    • For development: http://localhost:8788/sse

Using Claude Desktop

  1. Open Claude Desktop and go to Settings -> Developer -> Edit Config
  2. Add your MCP server configuration:
    {
      "mcpServers": {
        "strava": {
          "command": "npx",
          "args": [
            "mcp-remote",
            "https://mcp-strava-oauth.<your-subdomain>.workers.dev/sse"
          ]
        }
      }
    }
  3. Restart Claude Desktop and complete the OAuth flow

Development

Local Development

  1. Start the development server:

    wrangler dev
  2. 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

strava-mcp FAQ

How do I deploy the strava-mcp server?
Deploy using Cloudflare Workers with Node.js, npm, and Wrangler CLI installed.
What OAuth roles does strava-mcp serve?
It acts as an OAuth server for MCP clients and an OAuth client for Strava.
Can I use strava-mcp with multiple MCP clients?
Yes, it supports remote MCP connections for clients like Claude and Cursor.
What prerequisites are needed to run strava-mcp?
You need a Strava account, Cloudflare account, Node.js, npm, and Wrangler CLI.
Is strava-mcp suitable for production use?
It is a reference implementation but can be adapted for production with proper security measures.
How does strava-mcp handle user authentication?
Users sign in with their Strava account via OAuth to authenticate with MCP clients.
Does strava-mcp support other OAuth providers?
This implementation focuses on Strava, but the pattern can be extended to other providers.
What libraries does strava-mcp use for OAuth?
It uses the workers-oauth-provider library for OAuth integration on Cloudflare Workers.