1. Conduid
  2. Blockchain
  3. StravaMcp.Server
MCP server · Blockchain

StravaMcp.Server

A Model Context Protocol (MCP) server for browsing and querying the Strava API. Provides 21 tools for activities, segments, routes, clubs, gear, and more with automatic OAuth2 token refresh.

Unclaimed last commit 6 months ago blockchain
34Low

Scored 6 months ago · breakdown

About StravaMcp.Server

StravaMcp.Server is an MCP server published by OnefoursevenLabs in the Blockchain category: a Model Context Protocol (MCP) server for browsing and querying the Strava API. Provides 21 tools for activities, segments, routes, clubs, gear, and more with automatic OAuth2 token refresh.

Six months or more without a commit doesn't mean the server is broken, but check the open issues before depending on it in production.

Install

From source
git clone https://github.com/OnefoursevenLabs/Strava-MCP

This server has no ConduID identity, so agent calls to it are not receipted. Pin the version you install and review the source before granting it credentials.

Tools (21)

explore_segmentsFind popular segments in a geographic bounding box

Parameters not published.

get_activityGet full activity details (splits, laps, segments, gear)

Parameters not published.

get_activity_commentsGet comments on an activity

Parameters not published.

get_activity_kudosGet kudos givers for an activity

Parameters not published.

get_activity_lapsGet laps for an activity

Parameters not published.

get_activity_streamsGet time-series data (GPS, HR, power, cadence, altitude)

Parameters not published.

get_activity_zonesGet HR/power zone distribution for an activity

Parameters not published.

get_athleteGet authenticated athlete profile

Parameters not published.

get_athlete_statsGet aggregated athlete statistics (run/ride/swim totals)

Parameters not published.

get_clubGet club details

Parameters not published.

Show all 21 tools
get_club_activitiesList recent club member activities

Parameters not published.

get_club_membersList club members

Parameters not published.

get_gearGet gear details (bikes, shoes)

Parameters not published.

get_routeGet route details

Parameters not published.

get_segmentGet segment details

Parameters not published.

get_segment_effortsList athlete's efforts on a segment

Parameters not published.

list_activitiesList activities with pagination and time-range filtering

Parameters not published.

list_clubsList athlete's clubs

Parameters not published.

list_routesList athlete's routes

Parameters not published.

list_starred_segmentsList athlete's starred segments

Parameters not published.

update_activityUpdate activity name, description, sport type, gear, etc.

Parameters not published.

Ask AI

✦

Ask AI about StravaMcp.Server

Powered by Claude · Grounded in docs

I know everything about StravaMcp.Server. Ask me about installation, configuration, usage, or troubleshooting.

Security checks

  • ✓README presentThe repository ships documentation.

5 checks have not been run yet.

README

Strava MCP Server

A Model Context Protocol (MCP) server that exposes the Strava API as tools for LLM assistants. Built with C# / .NET 8.

Features

  • OAuth2 token management with automatic refresh and persistent token storage
  • 21 tools covering the full Strava read API plus activity updates
  • Stdio transport — works with Claude Desktop, Claude Code, and any MCP-compatible client

Available Tools

Tool Description
get_athlete Get authenticated athlete profile
get_athlete_stats Get aggregated athlete statistics (run/ride/swim totals)
list_activities List activities with pagination and time-range filtering
get_activity Get full activity details (splits, laps, segments, gear)
get_activity_laps Get laps for an activity
get_activity_zones Get HR/power zone distribution for an activity
get_activity_comments Get comments on an activity
get_activity_kudos Get kudos givers for an activity
get_activity_streams Get time-series data (GPS, HR, power, cadence, altitude)
update_activity Update activity name, description, sport type, gear, etc.
get_segment Get segment details
get_segment_efforts List athlete's efforts on a segment
explore_segments Find popular segments in a geographic bounding box
list_starred_segments List athlete's starred segments
list_routes List athlete's routes
get_route Get route details
get_gear Get gear details (bikes, shoes)
list_clubs List athlete's clubs
get_club Get club details
get_club_activities List recent club member activities
get_club_members List club members

Prerequisites

  • .NET 8 SDK or later
  • A Strava API application (create one here)
  • A valid refresh token with read_all,activity:read_all,activity:write scopes

Getting a Refresh Token

  1. Create an app at https://www.strava.com/settings/api
  2. Use the OAuth2 authorization flow to get a refresh token with the required scopes. You can use the Strava OAuth2 playground or a manual flow:
https://www.strava.com/oauth/authorize?client_id=YOUR_CLIENT_ID&response_type=code&redirect_uri=http://localhost&scope=read_all,activity:read_all,activity:write&approval_prompt=force
  1. Exchange the authorization code for tokens:
curl -X POST https://www.strava.com/oauth/token \
  -d client_id=YOUR_CLIENT_ID \
  -d client_secret=YOUR_CLIENT_SECRET \
  -d code=AUTHORIZATION_CODE \
  -d grant_type=authorization_code

Installation

As a .NET global tool (recommended)

dotnet tool install --global StravaMcp.Server

Then run it anywhere with:

strava-mcp-server

From source

cd src/StravaMcp.Server
dotnet build

Set environment variables:

export STRAVA_CLIENT_ID="your_client_id"
export STRAVA_CLIENT_SECRET="your_client_secret"
export STRAVA_REFRESH_TOKEN="your_refresh_token"
# Optional: custom path for cached tokens
export STRAVA_TOKEN_FILE="/path/to/strava_tokens.json"

Usage

With Claude Desktop

If installed as a global tool:

{
  "mcpServers": {
    "strava": {
      "command": "strava-mcp-server",
      "env": {
        "STRAVA_CLIENT_ID": "your_client_id",
        "STRAVA_CLIENT_SECRET": "your_client_secret",
        "STRAVA_REFRESH_TOKEN": "your_refresh_token"
      }
    }
  }
}

Or from source:

{
  "mcpServers": {
    "strava": {
      "command": "dotnet",
      "args": ["run", "--project", "/path/to/src/StravaMcp.Server"],
      "env": {
        "STRAVA_CLIENT_ID": "your_client_id",
        "STRAVA_CLIENT_SECRET": "your_client_secret",
        "STRAVA_REFRESH_TOKEN": "your_refresh_token"
      }
    }
  }
}

With Claude Code

# Global tool
claude mcp add strava -- strava-mcp-server

# Or from source
claude mcp add strava -- dotnet run --project /path/to/src/StravaMcp.Server

Make sure the environment variables are set in your shell before launching.

Direct / Standalone

strava-mcp-server
# or: dotnet run --project src/StravaMcp.Server

The server communicates via JSON-RPC over stdin/stdout. Diagnostic output goes to stderr.

Architecture

src/StravaMcp.Server/
├── Program.cs              # Entry point, wires up config + tools + server
├── Strava/
│   ├── StravaClient.cs     # HTTP client with auto token refresh
│   ├── StravaConfig.cs     # Configuration model
│   ├── StravaApiException.cs
│   └── TokenData.cs        # Token persistence model
├── Mcp/
│   ├── McpServer.cs        # JSON-RPC stdio server loop
│   ├── JsonRpcMessage.cs   # Request/response models
│   └── ToolDefinition.cs   # Tool + result models
└── Tools/
    ├── IStravaTool.cs      # Tool interface
    ├── ToolHelpers.cs      # Schema builder + argument helpers
    └── *.cs                # One file per tool (21 tools)

README copy captured when this server was indexed; it may lag the repository. The original is authoritative.

Questions

About StravaMcp.Server

How do I install StravaMcp.Server?

No package has been published for this server, so install it from source: clone the repository and follow its README.

Is StravaMcp.Server safe to use with an AI agent?

Its trust score is 34 out of 100 (low). It passes 1 of the 1 static security checks run so far. It has no ConduID identity yet, so agent calls to it are not receipted.

Is StravaMcp.Server still maintained?

The last commit was 6 months ago. That's long enough that you should check whether the maintainer is responding to issues before depending on it.