io.github.davidmosiah/strava-mcp
Privacy-first MCP server for Strava activities, streams, routes and training.
Versions
0.4.8latest0.4.70.4.60.4.50.4.4+ show 10 moreshow less
0.4.30.4.20.4.10.4.00.3.00.2.10.2.00.1.20.1.10.1.0Tools 22
strava_get_activity_streams Get raw Strava activity streams (time, distance, heartrate, cadence, watts, altitude).
strava_activity_series Bounded time-series for one activity metric (agent-safe-series/v1).
strava_data_inventory Inventory supported Strava data domains, auth scope requirements, privacy boundary and recommended first calls. Does not call Strava APIs or expose user data.
strava_agent_manifest Machine-readable install, runtime and client guidance for AI agents. Includes Hermes direct tool names and anti-gateway-restart guidance. Does not call Strava or expose secrets.
strava_capabilities Explain supported Strava data, privacy boundaries, GPS handling, recommended agent workflow and project links. Does not call Strava or expose secrets.
strava_quickstart Personalized 3-step setup walkthrough for the human user. Adapts to current state (env vars set? token present? what's next?). Call this first when the user asks 'how do I connect Strava?'
strava_demo Returns realistic example payloads of strava_daily_summary, strava_training_context, and strava_list_activities so agents see the contract before calling real Strava APIs.
strava_get_auth_url Generate a Strava OAuth authorization URL. Use this first when no local token exists.
strava_exchange_code Exchange a Strava OAuth authorization code for local tokens. Tokens are stored locally with 0600 permissions and are never returned. Requires explicit user action: the user must complete browser OAuth and supply the authorization code (agents must not invent codes).
strava_get_athlete Get the authenticated Strava athlete profile. Requires read/profile scope depending on requested fields.
strava_get_zones Get the authenticated athlete heart-rate and power zones when available.
strava_get_athlete_stats Get public-visible aggregate Strava stats for the authenticated athlete.
strava_connection_status Check local Strava config, token file, Node version, privacy mode, cache readiness and optional MCP client readiness without calling Strava or exposing secrets.
strava_cache_status Show optional local SQLite cache status. Enable with STRAVA_CACHE=sqlite or STRAVA_CACHE=true.
strava_privacy_audit Return local privacy, cache, token-path, GPS redaction and env-presence posture without revealing secret values.
strava_revoke_access Revoke the current Strava OAuth access grant and delete the local token file. Use only when the user explicitly wants to disconnect Strava. Gated by explicit_user_intent: true (requires explicit user intent).
strava_daily_summary Build a practical daily training/load summary from recent Strava activities. Read-only and non-medical.
strava_weekly_summary Build a weekly Strava scorecard with volume, intensity, sport mix, bottlenecks and next-week actions. Read-only and non-medical.
strava_training_context Normalize recent Strava activity load into a compact training_context for workout recommendation engines. Includes fallback guidance when recent Strava activity is missing.
strava_profile_get Read the canonical Delx Wellness profile shared with the other wellness MCP connectors (Nourish, Cycle Coach, CGM, etc.). Read-only. Profile stores only what the user typed during onboarding — never OAuth tokens, API keys, or biomarkers. Note: this profile does NOT change Strava's GPS-redaction default; Strava continues to redact latlng and route geometry unless STRAVA_GPS_INCLUDE=true or include_gps=true is explicitly passed.
strava_profile_update Persist a partial patch to the canonical Delx Wellness profile. Requires explicit_user_intent=true after the user confirms they want to save. Rejects secret-like fields (oauth, token, api_key, password, cookie, refresh, session). Strava's GPS-redaction default is unaffected by profile changes.
strava_onboarding Read-only. Return the 11-question Delx Wellness onboarding flow (en or pt-BR), the current shared profile, missing critical fields, and a cross-connector hint. Use this when the user starts a fresh wellness session and you need to fill out preferred_name, goals, devices, training context, nutrition, preferences, and safety. Strava continues to redact GPS by default — onboarding does not change that.
Permissions 4
network medium filesystem low shell high env_vars low