Strava MCP 服务器 logo

Strava MCP 服务器

Community
r-huijts

A Model Context Protocol (MCP) server that connects to Strava API, providing tools to access Strava data through LLMs

Publisherr-huijts
Repositorystrava-mcp
LanguageTypeScript
Forks
90
Stars
489
Available tools
24
Transport typestdio
Categories
LicenseMIT
Links
  • Connect tools to AI workflows

    Strava MCP 服务器 exposes MCP capabilities that can be used by compatible AI clients and agents.

  • 24 available tools

    Browse the callable actions below, including names and descriptions when provided by the server.

  • Ready-to-copy setup

    Use the installation snippets to configure this server in your preferred MCP client.

  • Open source signals

    489 stars and 90 forks from the linked repository.

Strava MCP Server

Talk to your Strava data using AI.

Connect Claude to your Strava account and ask questions in plain English: "How far did I run this month?", "Analyze my last ride", or "Show me my fastest segments."

MseeP.ai Security Assessment Badge


What Can You Do With This?

Once connected, just talk to Claude like you're talking to a friend who has access to all your Strava data:

🏃 Track Your Progress

"How many kilometers did I run this month?"

"Compare my running stats from January to December"

"What's my longest ride ever?"

📊 Analyze Your Workouts

"Break down my last cycling workout - show me power, heart rate, and cadence"

"How did my heart rate zones look during yesterday's run?"

"What was my average pace for each lap in my interval training?"

🗺️ Explore Routes & Segments

"What are the most popular cycling segments near Central Park?"

"Show me my starred segments"

"Export my Sunday morning route as a GPX file"

🏆 Get Coaching Insights

"Analyze my training load this week"

"How does my current fitness compare to last month?"

"Give me a summary of my cycling performance this year"


Quick Start (3 Steps)

Step 1: Add to Claude Desktop

Open your Claude Desktop configuration file:

  • Mac: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Add this to the file:

json
{
  "mcpServers": {
    "strava": {
      "command": "npx",
      "args": ["-y", "@r-huijts/strava-mcp-server"]
    }
  }
}

Step 1 (alternative): Add to Claude Code

You can add this MCP server to claude code with the following command:

claude mcp add --transport stdio strava -- npx @r-huijts/strava-mcp-server

You can confirm successful instalation as follows:

% claude mcp list
Checking MCP server health...

strava: npx @r-huijts/strava-mcp-server - ✓ Connected

Step 2: Restart Claude Desktop

Close and reopen Claude Desktop to load the new configuration.

Step 3: Connect Your Strava

Just say to Claude:

"Connect my Strava account"

A browser window will open. Enter your Strava API credentials, authorize the app, and you're done!

That's it! Start asking about your activities.


Connecting Your Strava Account

First Time Setup

When you say "Connect my Strava account", here's what happens:

  1. A browser window opens showing a setup page
  2. Enter your Strava API credentials (Client ID and Client Secret)
  3. Click "Continue to Strava" - you'll be redirected to Strava
  4. Authorize the app on Strava's website
  5. See the success message - you can close the browser
  6. Done! Claude confirms you're connected

Your credentials are saved locally at ~/.config/strava-mcp/config.json and persist across sessions.

Getting Your Strava API Credentials

You need to create a free Strava API application (one-time setup):

  1. Go to strava.com/settings/api
  2. Click "Create an App" (or view your existing app)
  3. Fill in the form:
    • Application Name: Anything you want (e.g., "My Claude Assistant")
    • Category: Choose any
    • Website: Can be anything (e.g., http://localhost)
    • Authorization Callback Domain: Must be localhost
  4. Copy your Client ID and Client Secret

That's it! You only need to do this once.

Managing Your Connection

  • Check status: "Am I connected to Strava?"
  • Reconnect: "Connect my Strava account" (use force: true to reconnect)
  • Disconnect: "Disconnect my Strava account"

Installation Options

Option A: Just Use It (Recommended)

No installation needed! The npx command in the Quick Start automatically downloads and runs the latest version.

Option B: Install Globally

If you prefer to install it once:

bash
npm install -g @r-huijts/strava-mcp-server

Then update your Claude config to use:

json
{
  "mcpServers": {
    "strava": {
      "command": "strava-mcp-server"
    }
  }
}

Note: Even though the package name is @r-huijts/strava-mcp-server, the executable name remains strava-mcp-server for backward compatibility.

Option C: Build from Source

For developers who want to modify the code:

bash
git clone https://github.com/r-huijts/strava-mcp.git
cd strava-mcp
npm install
npm run build

Then point Claude to your local build:

json
{
  "mcpServers": {
    "strava": {
      "command": "node",
      "args": ["/path/to/strava-mcp/dist/server.js"]
    }
  }
}

Example Conversations

Morning Check-in

You: What did I do for exercise this week?

Claude: Looking at your Strava activities this week, you completed:

  • Monday: 5.2km run (28:15)
  • Wednesday: 45km bike ride (1:32:00)
  • Saturday: 10km run (52:30)

Total: 60.2km across 3 activities. Nice consistency!

Workout Analysis

You: Analyze my last cycling workout in detail

Claude: Here's a breakdown of your ride "Evening Loop" from yesterday:

Overview

  • Distance: 42.3 km
  • Time: 1:28:45
  • Avg Speed: 28.6 km/h

Power Analysis

  • Average Power: 185W
  • Normalized Power: 198W
  • Max Power: 520W

Heart Rate

  • Average: 142 bpm
  • Max: 175 bpm
  • Time in Zone 4+: 23 minutes

Your power-to-heart-rate ratio suggests good aerobic efficiency...

Finding New Routes

You: Find me some challenging cycling climbs near Boulder, Colorado

Claude: Here are popular climbing segments near Boulder:

  1. Flagstaff Road - 5.2km, 6.8% avg grade
  2. Sunshine Canyon - 3.8km, 7.2% avg grade
  3. Left Hand Canyon - 8.1km, 4.5% avg grade

Want me to star any of these so you can find them easily later?


Available Tools

Account & Profile

What you can askWhat it does
"Connect my Strava account"Links your Strava to Claude
"Check my Strava connection"Shows connection status
"Disconnect my Strava account"Unlinks Strava and clears stored tokens
"Get my Strava profile"Shows your profile info
"What shoes do I have?"Lists your shoes and usage distance
"What are my training zones?"Shows HR and power zones

Activities

What you can askWhat it does
"Show my recent activities"Lists your latest workouts
"Get all my runs from January"Fetches activities with filters
"Analyze activity 12345"Detailed info about one activity
"Show the laps from my last run"Lap-by-lap breakdown
"Get heart rate data from my ride"Time-series workout data (optimized compact format)
"Show photos from my hike"Activity photos

Stats & Progress

What you can askWhat it does
"What are my running stats?"YTD and all-time totals
"How far have I cycled this year?"Activity totals by type
"What's my longest ride?"Personal records

Segments

What you can askWhat it does
"Show my starred segments"Your favorite segments
"Find segments near [location]"Discover popular segments
"Get details on segment 12345"Segment info and leaderboard
"Star this segment"Save to favorites
"Show my efforts on [segment]"Your attempts on a segment

Routes

What you can askWhat it does
"List my saved routes"Your created routes
"Get details for my [route name]"Route info
"Export [route] as GPX"Download for GPS devices
"Export [route] as TCX"Download for GPS devices

Clubs

What you can askWhat it does
"What clubs am I in?"Lists your Strava clubs

Workouts

What you can askWhat it does
"Turn this workout into a Zwift file"Formats a workout plan into a structured file (currently Zwift .zwo)

Server

What you can askWhat it does
"What version is the Strava server?"Shows the MCP server version and metadata

Troubleshooting

"Connect my Strava account" doesn't open a browser

  • Make sure Claude Desktop is running the MCP server (check for errors in Claude)
  • Try restarting Claude Desktop
  • Check that port 8111 isn't blocked by a firewall

"Authentication failed" or "Invalid token"

  • Your token may have expired - say "Connect my Strava account" to reconnect
  • Make sure your Strava API application is still active at strava.com/settings/api

"Missing credentials" error

  • You need to complete the OAuth flow - say "Connect my Strava account"
  • If you're using environment variables, make sure all 4 are set (see Developer section)

Claude doesn't see the Strava tools

  • Make sure your claude_desktop_config.json is valid JSON (no trailing commas!)
  • Restart Claude Desktop after making config changes
  • Check Claude's developer console for error messages

JSONRPC.ProtocolTransportError after package name change

If you're getting a JSONRPC error after updating to @r-huijts/strava-mcp-server:

  1. Clear npx cache: Run rm -rf ~/.npm/_npx in terminal
  2. Verify config uses @r-huijts/strava-mcp-server (not the old strava-mcp-server)
  3. Restart Claude Desktop completely (quit and reopen)
  4. Test manually: Run npx -y @r-huijts/strava-mcp-server - you should see "Starting Strava MCP Server v1.2.1..."

For Developers

Environment Variables

Instead of using the browser-based auth, you can set environment variables:

VariableDescription
STRAVA_CLIENT_IDYour Strava Application Client ID
STRAVA_CLIENT_SECRETYour Strava Application Client Secret
STRAVA_ACCESS_TOKENOAuth access token
STRAVA_REFRESH_TOKENOAuth refresh token
ROUTE_EXPORT_PATHDirectory for GPX/TCX exports

Token Refresh

The server automatically refreshes expired tokens. New tokens are saved to both process.env and ~/.config/strava-mcp/config.json.

Config Priority

  1. Environment variables (highest)
  2. ~/.config/strava-mcp/config.json
  3. Local .env file

Building & Testing

bash
npm install
npm run build
npm test

Activity Streams Optimization

The get-activity-streams tool uses a compact format by default, reducing payload size by ~70-80% while preserving all data:

  • Compact format (default): Raw arrays with metadata, ~70-80% smaller, ideal for LLM processing
  • Verbose format: Human-readable objects with formatted values (backward compatible)
  • Smart chunking: Large activities automatically split into ~50KB chunks
  • Optional downsampling: Can reduce very large datasets while preserving key features

The compact format includes comprehensive metadata (units, descriptions, statistics) so LLMs can understand the raw numeric data.

API Reference

The server implements the Model Context Protocol (MCP) and exposes 25 tools for Strava API v3. See the source code in src/tools/ for implementation details.

Contributing

Contributions welcome! Please submit a Pull Request.


License

MIT License - see LICENSE file for details.


Questions? Open an issue on GitHub.

Installation

TypingMind
Prerequisites:

Node.js 18+

{
  "mcpServers": {
    "r-huijts-strava-mcp": {
      "command": "",
      "args": []
    }
  }
}

Available Tools

  • get-athlete-profile

    Fetches the profile information for the authenticated athlete, including their unique numeric ID needed for other tools like get-athlete-stats.

  • get-athlete-stats

    Fetches the activity statistics (recent, YTD, all-time) for a specific athlete using their ID. Requires the athleteId obtained from the get-athlete-profile tool.

  • get-activity-details

    Fetches detailed information about a specific activity using its ID.

  • get-recent-activities

    Fetches the most recent activities for the authenticated athlete.

  • list-athlete-clubs

    Lists the clubs the authenticated athlete is a member of.

  • list-starred-segments

    Lists the segments starred by the authenticated athlete.

  • get-segment

    Fetches detailed information about a specific segment using its ID.

  • explore-segments

    Searches for popular segments within a given geographical area.

  • star-segment

    Stars or unstars a specific segment for the authenticated athlete.

  • get-segment-effort

    Fetches detailed information about a specific segment effort using its ID.

  • list-segment-efforts

    Lists the authenticated athlete's efforts on a specific segment, optionally filtering by date.

  • list-athlete-routes

    Lists the routes created by the authenticated athlete, with pagination.

  • get-route

    Fetches detailed information about a specific route using its ID.

  • export-route-gpx

    Exports a specific Strava route in GPX format and saves it to a pre-configured local directory.

  • export-route-tcx

    Exports a specific Strava route in TCX format and saves it to a pre-configured local directory.

  • get-activity-streams

    Retrieves detailed time-series data streams from a Strava activity. Perfect for analyzing workout metrics, visualizing routes, or performing detailed activity analysis.

    Key Features:

    1. Multiple Data Types: Access various metrics like heart rate, power, speed, GPS coordinates, etc.
    2. Flexible Resolution: Choose data density from low (~100 points) to high (~10000 points)
    3. Smart Pagination: Get data in manageable chunks optimized for LLM context limits
    4. Rich Statistics: Includes min/max/avg for numeric streams
    5. Dual Format Support: Compact (LLM-optimized) or verbose (human-readable)
    6. Intelligent Downsampling: Automatically reduce large datasets while preserving key features

    Format Options:

    • compact (default): Raw arrays, minified JSON, ~70-80% smaller payloads, ideal for LLM processing
    • verbose: Human-readable objects with formatted values, backward compatible with legacy format

    Common Use Cases:

    • Analyzing workout intensity through heart rate zones
    • Calculating power met
  • get-activity-laps

    Retrieves detailed lap data for a specific Strava activity.

    Use Cases:

    • Get complete lap data including timestamps, speeds, and metrics
    • Access raw values for detailed analysis or visualization
    • Extract specific lap metrics for comparison or tracking

    Parameters:

    • id (required): The unique identifier of the Strava activity.

    Output Format: Returns both a human-readable summary and complete JSON data for each lap, including:

    1. A text summary with formatted metrics
    2. Raw lap data containing all fields from the Strava API:
      • Unique lap ID and indices
      • Timestamps (start_date, start_date_local)
      • Distance and timing metrics
      • Speed metrics (average and max)
      • Performance metrics (heart rate, cadence, power if available)
      • Elevation data
      • Resource state information
      • Activity and athlete references

    Notes:

    • Requires activity:read scope for public/followers activities, activity:read_all for private activities
    • Returns complete data as received from Strava AP
  • get-athlete-zones

    Retrieves the authenticated athlete's configured heart rate and power zones.

    Output includes both a formatted summary and the raw JSON data.

  • get-all-activities

    Fetches complete activity history with optional filtering by date range and activity type. Supports pagination to retrieve all activities.

  • get-activity-photos

    Retrieves photos associated with a specific Strava activity.

    Use Cases:

    • Fetch all photos uploaded to an activity
    • Get photo URLs for display or download
    • Access photo metadata including location and timestamps

    Parameters:

    • id (required): The unique identifier of the Strava activity.
    • size (optional): Size of photos to return in pixels (e.g., 100, 600, 2048). If not specified, returns all available sizes.

    Output Format: Returns both a human-readable summary and complete JSON data for each photo, including:

    1. A text summary with photo count and URLs
    2. Raw photo data containing all fields from the Strava API:
      • Photo ID and unique identifier
      • URLs for different sizes
      • Source (1 = Strava, 2 = Instagram)
      • Timestamps (uploaded_at, created_at)
      • Location coordinates if available
      • Caption if provided

    Notes:

    • Requires activity:read scope for public/followers activities, activity:read_all for private activities
    • Photos may come from Strava uploads or linked In
  • get-server-version

    Returns the Strava MCP server version and related metadata.

  • connect-strava

    Connect your Strava account to enable activity tracking. This will open a browser window for secure authentication. Use this when the user asks to connect, link, or authenticate their Strava account.

  • disconnect-strava

    Disconnect your Strava account and remove stored credentials. Use this when the user wants to logout, disconnect, or remove their Strava connection.

  • check-strava-connection

    Check if Strava is connected and show the current connection status. Use this when the user asks about their connection status.

Use Strava MCP 服务器 MCP with multiple AI models

TypingMind connects MCP tools at the workspace level, so once Strava MCP 服务器 is connected, you can use it with different AI models in TypingMind instead of setting it up separately for each model. This MCP runs locally through the TypingMind MCP connector on your device.

Setup guide to use the local connector

Use this when the MCP server needs access to local files, apps, or private resources on your computer.

1

Open the MCP settings

In TypingMind, go to Settings, Advanced Settings, then Model Context Protocol and choose Setup Connector.

  1. Open TypingMind in your browser.
  2. Click the Settings icon.
  3. Go to Advanced Settings.
  4. Open the Model Context Protocol section.
  5. Click Setup Connector and choose This Device.
TypingMind MCP connector setup screen with This Device selected
2

Run the connector command

Choose This Device, copy the command from TypingMind, and run it in Terminal. Keep the process running while you use MCP.

  1. Copy the setup command shown by TypingMind.
  2. Open Terminal on macOS or Windows Terminal on Windows.
  3. Paste and run the command.
  4. Approve the package install if Terminal asks you to proceed.
  5. Keep the Terminal window running while using MCP tools.
3

Add Strava MCP 服务器 as a server

When the connector status is Ready, click Edit Servers and paste the MCP server configuration.

  1. Wait until the connector status shows Ready.
  2. Click Edit Servers.
  3. Paste the Strava MCP 服务器 MCP server configuration.
  4. Save the server list.
  5. Refresh if you want to confirm the connector is still ready.
TypingMind MCP settings showing active server and Edit Servers button
{
  "mcpServers": {
    "r-huijts-strava-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@r-huijts/strava-mcp-server"
      ]
    }
  }
}
4

Use it across models

Save the server list, open Plugins, enable the Strava MCP 服务器 MCP tools, then select any supported AI model in TypingMind and use the tools in chat or assign them to an AI agent.

  1. Open the Plugins page in TypingMind.
  2. Enable the Strava MCP 服务器 MCP tools.
  3. Start a chat and choose the AI model you want to use.
  4. Use the MCP tools in chat or assign them to an AI agent.
  5. Switch to another AI model whenever needed without reconnecting MCP.
TypingMind chat using enabled MCP tools with a selected AI model
Can you use Strava MCP 服务器 to help me with this task?
Strava MCP 服务器
Sure. I read it.
Here is what I found using Strava MCP 服务器.

Frequently asked questions

What is the Strava MCP 服务器 MCP server used for?

Strava MCP 服务器 is an MCP server that lets compatible AI clients connect to external tools and context. In TypingMind, you can add this MCP server once and make its tools available in your AI workspace.

Can I use Strava MCP 服务器 MCP with multiple AI models in TypingMind?

Yes. TypingMind connects MCP tools at the workspace level, so you can use Strava MCP 服务器 with different AI models such as Claude, ChatGPT, Gemini, or other models you have configured in TypingMind without setting up the MCP server separately for each model.

Why use Strava MCP 服务器 MCP with TypingMind?

TypingMind is one of the best frontends for LLM chat because it brings multiple AI models, prompts, plugins, AI agents, API keys, and MCP tools into one workspace. With Strava MCP 服务器 connected, you can use its MCP tools across your preferred models while keeping your chat workflow organized in TypingMind.

How do I connect Strava MCP 服务器 MCP to TypingMind?

Strava MCP 服务器 runs through the TypingMind local MCP connector. This is best when the MCP server needs access to local files, desktop apps, command-line tools, or private resources on your computer.

What tools does Strava MCP 服务器 MCP provide in TypingMind?

Strava MCP 服务器 exposes 24 MCP tools that can be enabled from the TypingMind Plugins page and used in chat or assigned to AI agents.

Do I need to share my API keys with TypingMind to use Strava MCP 服务器 MCP?

No. TypingMind is local-first and lets you keep your model providers, API keys, prompts, and MCP configuration under your control. If Strava MCP 服务器 requires authentication, add the required headers, OAuth settings, or local configuration for that MCP server when you create the connection.

Related MCP Servers

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇