Strava MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| STRAVA_CLIENT_ID | Yes | Your Strava API client ID | |
| STRAVA_CLIENT_SECRET | Yes | Your Strava API client secret | |
| STRAVA_REFRESH_TOKEN | Yes | Your Strava API refresh token obtained via OAuth |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| create_activityA | Create a manual activity on Strava. Requires activity:write scope. Args: name: The name of the activity. sport_type: Sport type, e.g. Run, Ride, Swim, Hike, Walk, MountainBikeRide, GravelRide, TrailRun, Yoga, WeightTraining, Workout, etc. start_date_local: Start time in ISO 8601 format (e.g. 2025-03-07T08:00:00). elapsed_time: Total elapsed time in seconds. description: Optional description. distance: Distance in meters. Optional for non-GPS activities. trainer: Set True if this is a trainer/indoor activity. commute: Set True if this is a commute. |
| get_activityA | Get full details for a specific activity including splits, segment efforts, laps, gear, description, and map data. Args: activity_id: The numeric Strava activity ID. include_all_efforts: If True, include all segment efforts (not just notable ones). |
| get_activity_commentsA | Get comments on a specific activity. Args: activity_id: The Strava activity ID. page_size: Number of comments per page (default 30). |
| get_activity_kudoersC | Get the list of athletes who gave kudos on an activity. Args: activity_id: The Strava activity ID. page: Page number (default 1). per_page: Items per page (default 30). |
| get_activity_lapsA | Get lap-by-lap breakdown for a specific activity. Useful for interval workouts and structured training sessions. Args: activity_id: The numeric Strava activity ID. |
| get_recent_activitiesA | Get the most recent activities from your Strava account. Args: count: Number of activities to return (1-200, default 10). |
| get_activities_by_dateA | Get activities within a specific date range. Args: after: Start date in YYYY-MM-DD format (inclusive). before: End date in YYYY-MM-DD format (inclusive). count: Max activities to return (1-200, default 50). |
| get_activity_zonesA | Get heart rate and power zones for a specific activity. Shows time spent in each zone. Requires Strava Summit. Args: activity_id: The Strava activity ID. |
| update_activityA | Update an existing activity. Requires activity:write scope. Only provide the fields you want to change. Args: activity_id: The Strava activity ID to update. name: New name for the activity. sport_type: New sport type (e.g. Run, Ride, Swim). description: New description. trainer: Set True/False for trainer flag. commute: Set True/False for commute flag. gear_id: ID of gear to associate (e.g. "b12345"). Use "none" to remove. |
| get_athlete_profileA | Get the authenticated athlete's full Strava profile. Returns name, bio, location, weight, FTP, bikes, shoes, premium status, and measurement preferences. |
| get_athlete_zonesA | Get the authenticated athlete's heart rate and power zones. Returns zone boundaries and distribution data. Requires profile:read_all scope. |
| get_athlete_statsA | Get all-time and recent statistics for the authenticated athlete. Includes totals for running, cycling, and swimming broken down by recent (last 4 weeks), year-to-date, and all-time. |
| update_athlete_weightC | Update the authenticated athlete's weight. Args: weight_kg: Athlete's weight in kilograms. |
| get_my_clubsA | List all clubs the authenticated athlete is a member of. Args: page: Page number (default 1). per_page: Items per page (default 30). |
| get_clubC | Get detailed information about a specific club. Args: club_id: The Strava club ID. |
| get_club_membersB | List members of a specific club. Args: club_id: The Strava club ID. page: Page number (default 1). per_page: Items per page (default 30). |
| get_club_adminsB | List administrators of a specific club. Args: club_id: The Strava club ID. page: Page number (default 1). per_page: Items per page (default 30). |
| get_club_activitiesB | List recent activities posted by members of a specific club. Args: club_id: The Strava club ID. page: Page number (default 1). per_page: Items per page (default 30). |
| get_gearB | Get details about a specific piece of gear (bike or shoes). Gear IDs start with 'b' for bikes and 'g' for shoes. Args: gear_id: The gear ID (e.g. "b12345" for a bike, "g12345" for shoes). |
| get_my_routesA | List the authenticated athlete's saved routes. Args: page: Page number (default 1). per_page: Items per page (default 30). |
| get_routeC | Get detailed information about a specific route. Args: route_id: The Strava route ID. |
| export_route_gpxB | Export a route as GPX XML data for use in GPS devices or other apps. Args: route_id: The Strava route ID. |
| export_route_tcxC | Export a route as TCX XML data for use in GPS devices or other apps. Args: route_id: The Strava route ID. |
| explore_segmentsA | Find popular segments within a geographic bounding box. Args: south_west_lat: South-west corner latitude. south_west_lng: South-west corner longitude. north_east_lat: North-east corner latitude. north_east_lng: North-east corner longitude. activity_type: "riding" or "running" (default "riding"). min_cat: Minimum climb category 0-5 (default 0). max_cat: Maximum climb category 0-5 (default 5). |
| get_starred_segmentsB | List the authenticated athlete's starred segments. Args: page: Page number (default 1). per_page: Items per page (default 30). |
| get_segmentB | Get detailed info about a segment: distance, grade, elevation, location, star count, effort count, and your PR. Args: segment_id: The Strava segment ID. |
| star_segmentC | Star or unstar a segment. Args: segment_id: The Strava segment ID. starred: True to star, False to unstar. |
| get_segment_effortsA | List your efforts on a specific segment. Optionally filter by date range. Args: segment_id: The Strava segment ID. start_date_local: Optional start date (ISO 8601, e.g. 2025-01-01T00:00:00Z). end_date_local: Optional end date (ISO 8601). per_page: Items per page (default 30). |
| get_segment_effortB | Get detailed information about a specific segment effort. Args: effort_id: The segment effort ID. |
| get_activity_streamsA | Get time-series stream data for an activity. Returns arrays of second-by-second data for heart rate, speed, power, cadence, altitude, GPS coordinates, temperature, and grade. Args: activity_id: The Strava activity ID. keys: Comma-separated stream types. Available: time, distance, latlng, altitude, velocity_smooth, heartrate, cadence, watts, temp, moving, grade_smooth. Defaults to all. |
| get_route_streamsC | Get stream data for a route (distance, altitude, latlng). Args: route_id: The Strava route ID. |
| get_segment_effort_streamsB | Get time-series stream data for a specific segment effort. Args: effort_id: The segment effort ID. keys: Comma-separated stream types (same as activity streams). |
| get_segment_streamsC | Get stream data for a segment (distance, altitude, latlng). Args: segment_id: The Strava segment ID. |
| get_upload_statusA | Check the processing status of an activity upload. Args: upload_id: The upload ID returned from a previous upload. |
| get_activities_by_typeA | Get recent activities filtered by sport type. Args: sport_type: Run, Ride, Swim, Walk, Hike, TrailRun, MountainBikeRide, GravelRide, VirtualRide, Yoga, etc. count: Number of recent activities to search through (max 200). |
| weekly_summaryA | Summary of all activities from the past 7 days. Total distance, time, elevation, and calories by sport type. |
| monthly_summaryA | Summary of all activities from the past 30 days. Total distance, time, elevation, and calories by sport type. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 37 tools
Each tool targets a distinct resource and action, with clear separation between activities, segments, routes, clubs, athlete profiles, and summaries. Even similar tools like get_recent_activities and get_activities_by_date have unambiguous differences in filtering.
Most tools follow a consistent verb_noun pattern (e.g., create_activity, get_activity, update_activity), but a few like monthly_summary and weekly_summary deviate from this pattern, using noun_adjective instead.
With 37 tools, the server is on the heavy side. While it covers a broad domain, this number exceeds the recommended range and may overwhelm agents, making selection and navigation more difficult.
The tool set covers most CRUD operations for activities, segments, routes, clubs, and athlete data, plus exports and summaries. A notable gap is the absence of a delete activity tool, but overall the surface is comprehensive.