claudex-strava-mcp
Connects to Strava API to query athlete profile, stats, activities, activity details, laps, heart rate zones, and routes.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@claudex-strava-mcpHow many runs did I do last week?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
claudex-strava-mcp
A Model Context Protocol (MCP) server that connects Claude to your Strava fitness data. Ask Claude questions about your real training history in plain English — no dashboards, no manual exports.
Built with TypeScript, the MCP SDK, and Zod schema validation. Automatic OAuth token refresh included.
What you can ask Claude
"How many walks did I do this month?"
"Where were my last 3 activities?"
"How do my 2025 and 2026 activity counts compare?"
"Which of my activities had the most stop time?"
"Am I hitting my Zone 2 training targets?"
Related MCP server: Strava MCP Server
Prerequisites
Node.js 18+
A Strava account with activities
A Strava API app (create one here)
Claude Desktop (or any MCP-compatible client)
Setup
1. Clone and install
git clone https://github.com/your-username/claudex-strava-mcp
cd claudex-strava-mcp
npm install2. Create your Strava API app
Go to strava.com/settings/api and create an app. Set the Authorization Callback Domain to localhost.
You'll receive a Client ID and Client Secret — keep these safe.
3. Get your refresh token
Copy the example env file and fill in your Client ID and Secret:
cp .env.example .env
# Edit .env and add your STRAVA_CLIENT_ID and STRAVA_CLIENT_SECRETThen run the OAuth helper:
npx tsx scripts/get-token.tsThis will:
Print an authorization URL — open it in your browser
Ask you to authorize the app on Strava
Redirect to localhost and exchange the code for tokens
Print your
STRAVA_REFRESH_TOKENin the terminal
Copy the printed refresh token into your .env:
STRAVA_CLIENT_ID=your_client_id
STRAVA_CLIENT_SECRET=your_client_secret
STRAVA_REFRESH_TOKEN=your_refresh_token4. Build the server
npm run buildThis compiles TypeScript to dist/.
5. Configure Claude Desktop
Add the following to your Claude Desktop config file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"strava": {
"command": "node",
"args": ["/absolute/path/to/claudex-strava-mcp/dist/index.js"],
"env": {
"STRAVA_CLIENT_ID": "your_client_id",
"STRAVA_CLIENT_SECRET": "your_client_secret",
"STRAVA_REFRESH_TOKEN": "your_refresh_token"
}
}
}
}Restart Claude Desktop. The Strava tools will appear in Claude's tool list.
Project structure
claudex-strava-mcp/
├── src/
│ ├── index.ts # MCP server entry point
│ ├── strava-client.ts # Strava API client with auto token refresh
│ └── tools.ts # 8 MCP tool definitions (Zod-validated)
├── scripts/
│ └── get-token.ts # One-time OAuth token helper
├── .env.example # Template — copy to .env and fill in values
├── .gitignore
├── package.json
└── tsconfig.jsonAvailable tools
Tool | Description |
| Your Strava profile and preferences |
| All-time, YTD, and recent totals by sport |
| Paginated activity list with date filters |
| Detailed stats for a single activity |
| Lap-by-lap breakdown |
| Heart rate zone distribution |
| Your saved routes |
| Detailed route info |
How it works
The server uses the MCP SDK's McpServer class and registers tools using Zod schemas for runtime validation. The Strava client handles OAuth token refresh automatically — if your access token is within 60 seconds of expiring, it refreshes using your stored refresh token before making any API call.
Claude prompt
│
▼
MCP Tool Layer (TypeScript)
│
├── list_activities ──► GET /athlete/activities
├── get_activity ──► GET /activities/{id}
├── get_activity_zones ► GET /activities/{id}/zones
└── ...
│
▼
Strava API
│
▼
Structured JSON → Claude reasons → Natural language responseDevelopment
npm run dev # Watch mode — recompiles on save
npm run build # Production build
npm start # Run compiled serverSecurity notes
Never commit your
.envfile — it's in.gitignoreRotate your Strava client secret at strava.com/settings/api if it's ever exposed
The OAuth scopes requested are
read,activity:read_all, andprofile:read_all— read-only access only
License
MIT
Built by Mostafa Didar Mahdi — Data Scientist, Anthropic-certified AI practitioner, Adelaide.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Flicense-qualityDmaintenanceEnables Claude to access and analyze your Strava activities through OAuth authentication. Supports retrieving activity lists and detailed workout data for fitness tracking and analysis.2
- AlicenseBqualityDmaintenanceConnects Claude to the Strava API to provide direct access to fitness data, including athlete statistics, detailed activity logs, and time-series performance metrics. It enables users to analyze training progress, compare workouts, and retrieve specific segment details through natural language queries.853ISC
- AlicenseAqualityDmaintenanceConnects Claude to your Strava account for analyzing training, predicting race times, and generating periodized training plans via natural language.1353ISC
- Alicense-qualityCmaintenanceConnects Claude to Strava data for natural language queries about rides, stats, and activities.21MIT
Related MCP Connectors
Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
Garmin data in Claude: 135 tools — activities, sleep, HRV, training, workouts. Free, open source.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/mossydidar/claudex-strava-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server