stravamcp
Provides tools for interacting with the Strava API, allowing retrieval of athlete profiles, stats, activities, activity details, laps, zones, streams, comments, kudos, clubs, gear, routes, segments, and rate limit information.
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., "@stravamcpShow my last 5 activities with distance and pace."
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.
strava-server
Two servers over one Strava client:
an Express HTTP server that runs the OAuth 2.0 flow and exposes the Strava v3 API as JSON endpoints;
an MCP server (stdio) that exposes the same data as tools for an AI agent.
Both share src/strava/* and the same token file, so you authorize once in the browser and the
MCP server picks the tokens up automatically.
1. Create a Strava API application
Sign in at https://www.strava.com/settings/api and create an app (a Strava subscription is required).
Set Authorization Callback Domain to
localhost.Copy the Client ID and Client Secret.
New apps start in single-player mode — only your own account can authorize them, which is exactly what this server needs.
Related MCP server: strava-mcp
2. Configure
Copy-Item .env.example .env
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))" # paste into SESSION_SECRETFill in STRAVA_CLIENT_ID and STRAVA_CLIENT_SECRET in .env.
.env and .tokens.json are gitignored — never commit them.
3. Run
npm install
npm run dev # HTTP server, watch mode
# or
npm run build; npm startThen open http://localhost:3000/auth/login and click Authorize. Strava redirects back to
/auth/callback, the server exchanges the one-time code for a refresh token + access token, and
persists them to .tokens.json (mode 600). Access tokens expire every 6 hours; the server
refreshes them automatically before each request, so you only authorize once.
4. MCP server
npm run mcp # stdio, via tsx
# or
npm run build; npm run mcp:startVS Code picks up .vscode/mcp.json automatically — open the Chat view, switch to
Agent mode and start the strava server. For other clients:
{
"mcpServers": {
"strava": {
"command": "node",
"args": ["C:/path/to/stravamcp/dist/mcp/index.js"],
"env": {
"STRAVA_CLIENT_ID": "...",
"STRAVA_CLIENT_SECRET": "..."
}
}
}
}.env and the token file are resolved relative to the package directory, not the working
directory, so the MCP server works no matter where the client launches it from.
Tools
Tool | Strava endpoint |
| Connection state, granted scopes, token expiry |
| Profile + totals + recent activities in one call |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Last-seen rate-limit headers |
All tools are read-only and annotated as such. Responses that would blow up an agent's context are trimmed by default: segment efforts and full-resolution polylines are opt-in, and streams are evenly downsampled (200 points by default).
If a tool reports "Not connected to Strava", run the HTTP server once and complete
/auth/login — the MCP server reads the same .tokens.json.
HTTP endpoints
Auth
Method | Path | Description |
GET |
| Redirect to Strava's consent screen (CSRF-protected via a signed |
GET |
| Code → token exchange |
GET |
| Connection state, granted scope, token expiry |
POST |
| Deauthorize with Strava and delete the local tokens |
Data
Method | Path | Strava endpoint |
GET |
| Aggregated profile + totals + last 10 activities (formatted in km/min) |
GET |
|
|
GET |
|
|
GET |
|
|
GET |
|
|
GET |
|
|
GET |
|
|
GET |
|
|
GET |
|
|
GET |
|
|
GET |
|
|
GET |
|
|
GET |
|
|
GET |
|
|
GET |
|
|
GET |
|
|
GET |
|
|
GET |
|
|
GET |
| Last-seen |
Example:
curl http://localhost:3000/api/me
curl "http://localhost:3000/api/activities?per_page=50&after=1704067200"
curl "http://localhost:3000/api/activities/123456789/streams?keys=time,heartrate,watts"Scopes
STRAVA_SCOPE defaults to read,read_all,profile:read_all,activity:read_all:
profile:read_all— detailed athlete representation and/athlete/zonesactivity:read_all— "Only Me" activities, otherwise they are filtered outread_all— private routes and segments
If you change the scope you must re-run /auth/login; /auth/callback reports any scope the
athlete declined under missing_scope.
Rate limits
Default limits are 200 requests / 15 min and 2,000 / day. The client records the limit headers
from every response; a 429 is surfaced as a JSON error with the current usage. From the MCP
server, call strava_get_rate_limit before issuing a burst of requests.
Notes
/activities/{id}/zonesand/segment_effortsrequire a Strava subscription.Tokens are stored on disk in plain JSON. Keep the file local; for a multi-user deployment replace
src/strava/token-store.tswith an encrypted, per-user store.
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
- AlicenseAqualityDmaintenanceAn MCP server that enables interaction with the Strava API v3 to manage fitness activities, athlete profiles, segments, and routes. It supports retrieving detailed performance metrics, exploring geographic data, and managing club information through natural language.36ISC
- Alicense-qualityBmaintenanceMCP server for Strava integration, enabling LLMs to query activities, athlete stats, segments, routes, and perform training analysis.7MIT
- Flicense-qualityDmaintenanceMCP server to fetch Strava activities using OAuth authentication with automatic token refresh. Allows retrieving recent activities, activities by date range, activity details, and athlete stats.
- Alicense-qualityCmaintenanceMCP server that exposes Strava API v3 data (activities, segments, routes, clubs, gear, streams) as tools for any MCP client. Read-only by default, with an optional --write flag to enable mutating operations.181MIT
Related MCP Connectors
MCP server for Argo RPG Platform — connects AI assistants to campaign data via OAuth2
MCP server exposing the Backtest360 engine API as tools for AI agents.
MCP server connecting AI agents to non-custodial staking data across 130+ networks.
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/sivaparthi/stravamcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server