Privacy-first MCP server for Strava activities, streams, routes and training.
Privacy-first MCP server for Strava activities, streams, routes and training.
This is a well-structured MCP server for reading Strava fitness data with appropriate OAuth-based authentication and privacy controls. Authentication is properly implemented via OAuth 2.0 with tokens stored locally under restrictive permissions (0600). The codebase shows good security practices including privacy modes to control GPS data exposure, input validation via Zod schemas, and clear scope management. No critical vulnerabilities or malicious patterns detected. Supply chain analysis found 3 known vulnerabilities in dependencies (0 critical, 3 high severity). Package verification found 1 issue.
5 files analyzed · 8 issues found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Set these up before or after installing:
Environment variable: STRAVA_CLIENT_ID
Environment variable: STRAVA_CLIENT_SECRET
Environment variable: STRAVA_REDIRECT_URI
Environment variable: STRAVA_TOKEN_PATH
Environment variable: STRAVA_PRIVACY_MODE
Environment variable: STRAVA_CACHE
Environment variable: STRAVA_CACHE_PATH
Add this to your MCP configuration file:
{
"mcpServers": {
"io-github-davidmosiah-strava-mcp": {
"env": {
"STRAVA_CACHE": "your-strava-cache-here",
"STRAVA_CLIENT_ID": "your-strava-client-id-here",
"STRAVA_CACHE_PATH": "your-strava-cache-path-here",
"STRAVA_TOKEN_PATH": "your-strava-token-path-here",
"STRAVA_PRIVACY_MODE": "your-strava-privacy-mode-here",
"STRAVA_REDIRECT_URI": "your-strava-redirect-uri-here",
"STRAVA_CLIENT_SECRET": "your-strava-client-secret-here"
},
"args": [
"-y",
"strava-mcp-unofficial"
],
"command": "npx"
}
}
}From the project's GitHub README.
Unofficial, local-first MCP server that lets AI agents read your Strava activities, routes, streams and training context through the official Strava API.
Website: https://stravamcp.vercel.app/
GitHub Pages mirror: https://davidmosiah.github.io/strava-mcp/
Unofficial project: this repository is not affiliated with, endorsed by, sponsored by, or supported by Strava, Inc. Strava is a trademark of its respective owner. Use this project only with your own Strava account and according to Strava's Developer Terms and API policies.
Built by David Mosiah for people building practical AI-agent workflows around training, endurance, routes, activity streams and performance reflection.
strava-mcp-server exposes Strava to MCP-compatible agents with a privacy-first local setup:
doctor CLI for non-technical users.doctor detects limited tokens before agents hit permission errors.strava_agent_manifest and strava://agent-manifest give agents machine-readable install/runtime rules.setup --client hermes writes a pinned MCP config and a local Hermes skill to reduce terminal/gateway friction.summary, structured, raw.0600 permissions.The server runs over MCP stdio, so it works with Claude Desktop, Cursor, Windsurf, Hermes, OpenClaw and other MCP clients.
npx -y strava-mcp-unofficial setup
npx -y strava-mcp-unofficial auth
npx -y strava-mcp-unofficial doctor
doctor should report the recommended scopes as granted:
read activity:read_all profile:read_all
If you only see read, re-run:
npx -y strava-mcp-unofficial auth
For MCP clients, use the package without a subcommand so it starts the stdio server:
{
"mcpServers": {
"strava": {
"command": "npx",
"args": ["-y", "strava-mcp-unofficial"]
}
}
}
On a remote Hermes server, keep secrets out of chat and MCP client config when possible:
npx -y strava-mcp-unofficial setup --client hermes --no-auth
npx -y strava-mcp-unofficial auth
npx -y strava-mcp-unofficial doctor --client hermes
hermes mcp test strava
If the browser OAuth flow must happen on your local machine, run auth locally, then copy only ~/.strava-mcp/tokens.json to the server with chmod 600. The token must include activity:read_all profile:read_all read for activity history and streams.
Hermes usually exposes names with its MCP prefix. Common direct tools:
mcp_strava_strava_agent_manifestmcp_strava_strava_connection_statusmcp_strava_strava_daily_summarymcp_strava_strava_weekly_summarymcp_strava_strava_get_activity_streamsAfter editing ~/.hermes/config.yaml, use /reload-mcp or hermes mcp test strava. Do not restart the Hermes gateway for normal Strava data access.
Create an app at https://www.strava.com/settings/api.
Recommended callback / redirect URI:
http://127.0.0.1:3000/callback
Default read scopes:
read activity:read_all profile:read_all
Why these scopes:
read: public profile, routes and public Strava resources.activity:read_all: your activities, including private activities visible to your app.profile:read_all: fuller authenticated athlete profile fields.No write scope is requested by default.
setup writes these into ~/.strava-mcp/config.json, so most users do not need to manually export them.
export STRAVA_CLIENT_ID="your-client-id"
export STRAVA_CLIENT_SECRET="your-client-secret"
export STRAVA_REDIRECT_URI="http://127.0.0.1:3000/callback"
# Optional
export STRAVA_SCOPES="read activity:read_all profile:read_all"
export STRAVA_PRIVACY_MODE="structured" # summary | structured | raw
export STRAVA_CACHE="sqlite"
Auth and setup:
strava_agent_manifeststrava_get_auth_urlstrava_exchange_codestrava_revoke_accessstrava_connection_statusstrava_cache_statusstrava_privacy_auditstrava_capabilitiesAthlete and training:
strava_get_athletestrava_get_zonesstrava_get_athlete_statsstrava_list_activitiesstrava_get_activitystrava_get_activity_zonesstrava_get_activity_streamsRoutes and context:
strava_list_routesstrava_get_routestrava_list_clubsstrava_get_gearWorkflow tools:
strava_daily_summarystrava_weekly_summarystrava://capabilitiesstrava://agent-manifeststrava://athletestrava://latest/activitystrava://summary/dailystrava://summary/weeklydaily_training_directorweekly_endurance_reviewactivity_stream_investigatorThis project uses the official Strava API v3. When this project says raw, it means the upstream JSON returned by supported Strava endpoints.
It does not mean continuous 24/7 sensor telemetry. Strava activity streams are tied to recorded activities and may include data such as heartrate, cadence, watts, altitude, distance and optional GPS lat/lng when Strava has it.
~/.strava-mcp/tokens.json.git clone https://github.com/davidmosiah/strava-mcp.git
cd strava-mcp
npm install
npm test
Be the first to review this server!
by Modelcontextprotocol · Developer Tools
Read, search, and manipulate Git repositories programmatically
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
by mcp-marketplace · Developer Tools
Create, build, and publish Python MCP servers to PyPI — conversationally.
by Microsoft · Content & Media
Convert files (PDF, Word, Excel, images, audio) to Markdown for LLM consumption
by mcp-marketplace · Developer Tools
Scaffold, build, and publish TypeScript MCP servers to npm — conversationally
by Taylorwilsdon · Productivity
Control Gmail, Calendar, Docs, Sheets, Drive, and more from your AI