{"name":"io.github.davidmosiah/strava-mcp","slug":"davidmosiah-strava-mcp","title":null,"description":"Privacy-first MCP server for Strava activities, streams, routes and training.","url":"https://mcp.market/server/davidmosiah-strava-mcp","rating":null,"grade":"B","score":83,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":37,"stars":3,"forks":0,"downloads_week":418,"last_push_at":"2026-11-05T16:38:17.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/davidmosiah/strava-mcp","website":"https://wellness.delx.ai/connectors/strava","version":"0.4.6","remotes":[],"packages":[{"registryType":"npm","identifier":"strava-mcp-unofficial","version":"0.4.6","transport":{"type":"stdio"},"environmentVariables":[{"description":"Strava OAuth client ID. Optional when configured with strava-mcp-server setup.","format":"string","name":"STRAVA_CLIENT_ID"},{"description":"Strava OAuth client secret. Prefer strava-mcp-server setup so this secret is stored in ~/.strava-mcp/config.json instead of MCP client config.","format":"string","isSecret":true,"name":"STRAVA_CLIENT_SECRET"},{"description":"Redirect URI configured in the Strava Developer Dashboard. Optional when configured with strava-mcp-server setup.","format":"string","name":"STRAVA_REDIRECT_URI"},{"description":"Optional local path for OAuth tokens. Defaults to ~/.strava-mcp/tokens.json.","format":"string","name":"STRAVA_TOKEN_PATH"},{"description":"Optional payload mode: summary, structured, or raw. Defaults to structured. raw means full Strava API payloads, not continuous 24/7 raw sensor telemetry.","format":"string","name":"STRAVA_PRIVACY_MODE"},{"description":"Optional SQLite cache toggle. Set to true or sqlite to enable.","format":"string","name":"STRAVA_CACHE"},{"description":"Optional local SQLite cache path. Defaults to ~/.strava-mcp/cache.sqlite.","format":"string","name":"STRAVA_CACHE_PATH"},{"description":"Set to true to bypass the in-memory HTTP response cache (60s TTL for GET only). POST/PUT/DELETE and 4xx/5xx responses are never cached regardless.","format":"string","name":"STRAVA_NO_CACHE"}]}],"tools":[{"name":"strava_agent_manifest","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"strava_cache_status","description":"Show optional local SQLite cache status. Enable with STRAVA_CACHE=sqlite or STRAVA_CACHE=true.","write_action":false,"price_micros":0,"input_schema":null},{"name":"strava_capabilities","description":"Explain supported Strava data, privacy boundaries, GPS handling, recommended agent workflow and project links. Does not call Strava or expose secrets.","write_action":false,"price_micros":0,"input_schema":null},{"name":"strava_connection_status","description":"Check local Strava config, token file, Node version, privacy mode, cache readiness and optional MCP client readiness without calling Strava or exposing secrets.","write_action":false,"price_micros":0,"input_schema":null},{"name":"strava_daily_summary","description":"Build a practical daily training/load summary from recent Strava activities. Read-only and non-medical.","write_action":false,"price_micros":0,"input_schema":null},{"name":"strava_data_inventory","description":"Inventory supported Strava data domains, auth scope requirements, privacy boundary and recommended first calls. Does not call Strava APIs or expose user data.","write_action":false,"price_micros":0,"input_schema":null},{"name":"strava_demo","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"strava_exchange_code","description":"Exchange a Strava OAuth authorization code for local tokens. Tokens are stored locally with 0600 permissions and are never returned.","write_action":false,"price_micros":0,"input_schema":null},{"name":"strava_get_activity_streams","description":"Get Strava activity streams such as time, distance, heartrate, cadence, watts and altitude. GPS latlng is withheld unless include_gps=true or privacy_mode=raw.","write_action":false,"price_micros":0,"input_schema":null},{"name":"strava_get_athlete","description":"Get the authenticated Strava athlete profile. Requires read/profile scope depending on requested fields.","write_action":false,"price_micros":0,"input_schema":null},{"name":"strava_get_athlete_stats","description":"Get public-visible aggregate Strava stats for the authenticated athlete.","write_action":false,"price_micros":0,"input_schema":null},{"name":"strava_get_auth_url","description":"Generate a Strava OAuth authorization URL. Use this first when no local token exists.","write_action":false,"price_micros":0,"input_schema":null},{"name":"strava_get_zones","description":"Get the authenticated athlete heart-rate and power zones when available.","write_action":false,"price_micros":0,"input_schema":null},{"name":"strava_onboarding","description":"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 tha","write_action":false,"price_micros":0,"input_schema":null},{"name":"strava_privacy_audit","description":"Return local privacy, cache, token-path, GPS redaction and env-presence posture without revealing secret values.","write_action":false,"price_micros":0,"input_schema":null},{"name":"strava_profile_get","description":"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_","write_action":false,"price_micros":0,"input_schema":null},{"name":"strava_profile_update","description":"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.","write_action":true,"price_micros":0,"input_schema":null},{"name":"strava_quickstart","description":"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?'","write_action":false,"price_micros":0,"input_schema":null},{"name":"strava_revoke_access","description":"Revoke the current Strava OAuth access grant and delete the local token file. Use only when the user explicitly wants to disconnect Strava.","write_action":false,"price_micros":0,"input_schema":null},{"name":"strava_training_context","description":"Normalize recent Strava activity load into a compact training_context for workout recommendation engines. Includes fallback guidance when recent Strava activity is missing.","write_action":false,"price_micros":0,"input_schema":null},{"name":"strava_weekly_summary","description":"Build a weekly Strava scorecard with volume, intensity, sport mix, bottlenecks and next-week actions. Read-only and non-medical.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":83,"grade":"B","scanned_at":"2026-11-10T14:58:44.205Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-11-10T14:58:44.153Z","components":{"code":{"score":25,"max":25,"notes":["58 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 5 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"strava-mcp-unofficial","version":"0.4.6","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":5,"publishedAt":"2026-05-29T18:52:13.111Z","repositoryUrl":"git+https://github.com/davidmosiah/strava-mcp.git","weeklyDownloads":418}],"repo":{"found":true,"owner":"davidmosiah","repo":"strava-mcp","archived":false,"pushedAt":"2026-11-05T16:38:17Z","stars":3,"forks":0,"openIssues":1,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/624359?v=4","ownerCreatedAt":"2011-02-18T00:23:21Z","license":"MIT"},"icon":{"url":"https://wellness.delx.ai/favicon.svg","source":"registry"},"presence":{"stars":3,"forks":0,"downloadsWeek":418,"license":"MIT","lastPushAt":"2026-11-05T16:38:17.000Z","score":37}}}},"grade_history":[],"reviews":[]}