← Back to search

io.github.davidmosiah/strava-mcp

davidmosiah Scanned 19d ago

Privacy-first MCP server for Strava activities, streams, routes and training.

B
78.4 / 100

Versions

0.4.8latest
Jul 30, 2026
0.4.7
Jul 16, 2026
0.4.6
May 29, 2026
0.4.5
May 24, 2026
0.4.4
May 24, 2026
+ show 10 moreshow less
0.4.3
May 20, 2026
0.4.2
May 20, 2026
0.4.1
May 11, 2026
0.4.0
May 11, 2026
0.3.0
May 11, 2026
0.2.1
May 6, 2026
0.2.0
May 4, 2026
0.1.2
May 1, 2026
0.1.1
May 1, 2026
0.1.0
May 1, 2026
PermissionsTool SafetyAuthAnnotationsCode QualityStabilitySpecVuln HistoryAuthorTransparencyCommunity

Tools 22

strava_get_activity_streams
annotations: verified low

Get raw Strava activity streams (time, distance, heartrate, cadence, watts, altitude).

readOnlyHint true openWorldHint true idempotentHint true destructiveHint false
strava_activity_series
annotations: verified low

Bounded time-series for one activity metric (agent-safe-series/v1).

readOnlyHint true openWorldHint true idempotentHint true destructiveHint false
strava_data_inventory
annotations: verified low

Inventory supported Strava data domains, auth scope requirements, privacy boundary and recommended first calls. Does not call Strava APIs or expose user data.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
strava_agent_manifest
annotations: verified low

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.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
strava_capabilities
annotations: verified low

Explain supported Strava data, privacy boundaries, GPS handling, recommended agent workflow and project links. Does not call Strava or expose secrets.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
strava_quickstart
annotations: verified low

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?'

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
strava_demo
annotations: verified low

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.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
strava_get_auth_url
annotations: verified low

Generate a Strava OAuth authorization URL. Use this first when no local token exists.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
strava_exchange_code
annotations: verified low

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).

readOnlyHint false openWorldHint true idempotentHint false destructiveHint false
strava_get_athlete
annotations: verified low

Get the authenticated Strava athlete profile. Requires read/profile scope depending on requested fields.

readOnlyHint true openWorldHint true idempotentHint true destructiveHint false
strava_get_zones
annotations: verified low

Get the authenticated athlete heart-rate and power zones when available.

readOnlyHint true openWorldHint true idempotentHint true destructiveHint false
strava_get_athlete_stats
annotations: verified low

Get public-visible aggregate Strava stats for the authenticated athlete.

readOnlyHint true openWorldHint true idempotentHint true destructiveHint false
strava_connection_status
annotations: verified low

Check local Strava config, token file, Node version, privacy mode, cache readiness and optional MCP client readiness without calling Strava or exposing secrets.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
strava_cache_status
annotations: verified low

Show optional local SQLite cache status. Enable with STRAVA_CACHE=sqlite or STRAVA_CACHE=true.

response_format enum
readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
strava_privacy_audit
annotations: verified low

Return local privacy, cache, token-path, GPS redaction and env-presence posture without revealing secret values.

response_format enum
readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
strava_revoke_access
annotations: verified low

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).

response_format enum
readOnlyHint false openWorldHint true idempotentHint false destructiveHint true
strava_daily_summary
annotations: verified low

Build a practical daily training/load summary from recent Strava activities. Read-only and non-medical.

readOnlyHint true openWorldHint true idempotentHint true destructiveHint false
strava_weekly_summary
annotations: verified low

Build a weekly Strava scorecard with volume, intensity, sport mix, bottlenecks and next-week actions. Read-only and non-medical.

readOnlyHint true openWorldHint true idempotentHint true destructiveHint false
strava_training_context
annotations: verified low

Normalize recent Strava activity load into a compact training_context for workout recommendation engines. Includes fallback guidance when recent Strava activity is missing.

readOnlyHint true openWorldHint true idempotentHint true destructiveHint false
strava_profile_get
annotations: verified low

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.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
strava_profile_update
annotations: verified low

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.

readOnlyHint false openWorldHint false idempotentHint false destructiveHint false
strava_onboarding
annotations: verified low

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.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false

Permissions 4

network medium
Server uses network capabilities via: fetch()
filesystem low
Server uses filesystem capabilities via: fs
shell high
Server uses shell capabilities via: child_process, spawn(), spawnSync()
env_vars low
Server uses env_vars capabilities via: process.env

Scan Findings 59

info
Transport: stdio manifest_parser · 90%
info
Tool 'strava_data_inventory' annotations are consistent annotation_checker · 80%
info
Tool 'strava_agent_manifest' annotations are consistent annotation_checker · 80%
info
Tool 'strava_capabilities' annotations are consistent annotation_checker · 80%
info
Tool 'strava_quickstart' annotations are consistent annotation_checker · 80%
info
Tool 'strava_demo' annotations are consistent annotation_checker · 80%
info
Tool 'strava_get_auth_url' annotations are consistent annotation_checker · 80%
info
Tool 'strava_exchange_code' annotations are consistent annotation_checker · 80%
info
Tool 'strava_get_athlete' annotations are consistent annotation_checker · 80%
info
Tool 'strava_get_zones' annotations are consistent annotation_checker · 80%
info
Tool 'strava_get_athlete_stats' annotations are consistent annotation_checker · 80%
info
Tool 'strava_get_activity_streams' annotations are consistent annotation_checker · 80%
info
Tool 'strava_activity_series' annotations are consistent annotation_checker · 80%
info
Tool 'strava_connection_status' annotations are consistent annotation_checker · 80%
info
Tool 'strava_cache_status' annotations are consistent annotation_checker · 80%
info
Tool 'strava_privacy_audit' annotations are consistent annotation_checker · 80%
info
Tool 'strava_revoke_access' annotations are consistent annotation_checker · 80%
info
Tool 'strava_daily_summary' annotations are consistent annotation_checker · 80%
info
Tool 'strava_weekly_summary' annotations are consistent annotation_checker · 80%
info
Tool 'strava_training_context' annotations are consistent annotation_checker · 80%
info
Tool 'strava_profile_get' annotations are consistent annotation_checker · 80%
info
Tool 'strava_profile_update' annotations are consistent annotation_checker · 80%
info
Tool 'strava_onboarding' annotations are consistent annotation_checker · 80%
info
Required env vars (7) manifest_parser · 80%
info
Sandbox failed to start for output poisoning scan output_poisoning · 100%
high
Hardcoded OAuth client secret in davidmosiah-strava-mcp-381c6fc/scripts/cli-ux-test.mjs auth_checker · 95%
high
Hardcoded OAuth client secret in davidmosiah-strava-mcp-381c6fc/scripts/endpoint-contract-test.mjs auth_checker · 95%
high
Hardcoded OAuth client secret in davidmosiah-strava-mcp-381c6fc/scripts/security-hardening-test.mjs auth_checker · 95%
high
Hardcoded OAuth client secret in davidmosiah-strava-mcp-381c6fc/scripts/agent-readiness-test.mjs auth_checker · 95%
info
Sandbox failed to start for behavioral verification behavioral_verifier · 100%
info
package.json metadata manifest_parser · 100%
info
Tool: strava_data_inventory manifest_parser · 85%
info
Tool: strava_agent_manifest manifest_parser · 85%
info
Tool: strava_capabilities manifest_parser · 85%
info
Tool: strava_quickstart manifest_parser · 85%
info
Tool: strava_demo manifest_parser · 85%
info
Tool: strava_get_auth_url manifest_parser · 85%
info
Tool: strava_exchange_code manifest_parser · 85%
info
Tool: strava_get_athlete manifest_parser · 85%
info
Tool: strava_get_zones manifest_parser · 85%
info
Tool: strava_get_athlete_stats manifest_parser · 85%
info
Tool: strava_get_activity_streams manifest_parser · 85%
info
Tool: strava_activity_series manifest_parser · 85%
info
Tool: strava_connection_status manifest_parser · 85%
info
Tool: strava_cache_status manifest_parser · 85%
info
Tool: strava_privacy_audit manifest_parser · 85%
info
Tool: strava_revoke_access manifest_parser · 85%
info
Tool: strava_daily_summary manifest_parser · 85%
info
Tool: strava_weekly_summary manifest_parser · 85%
info
Tool: strava_training_context manifest_parser · 85%
info
Tool: strava_profile_get manifest_parser · 85%
info
Tool: strava_profile_update manifest_parser · 85%
info
Tool: strava_onboarding manifest_parser · 85%
medium
Permission: network access detected permission_analyzer · 70%
low
Permission: filesystem access detected permission_analyzer · 90%
high
Permission: shell access detected permission_analyzer · 95%
low
Permission: env_vars access detected permission_analyzer · 90%
info
SBOM generated: 170 components sbom_generator · 100%
medium
No build provenance detected (SLSA L0) slsa_assessor · 90%