strava-openapi-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
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
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_statsA | Get Athlete Stats Endpoint: GET /athletes/{id}/stats Description: Returns the activity stats of an athlete. Only includes data from activities set to Everyone visibilty. Read-only operation. |
| get_logged_in_athleteA | Get Authenticated Athlete Endpoint: GET /athlete Description: Returns the currently authenticated athlete. Tokens with profile:read_all scope will receive a detailed athlete representation; all others will receive a summary representation. Read-only operation. |
| put_update_logged_in_athleteB | Update Athlete Endpoint: PUT /athlete Description: Update the currently authenticated athlete. Requires profile:write scope. This operation modifies Strava data. Scopes: required: profile:write. |
| get_logged_in_athlete_zonesB | Get Zones Endpoint: GET /athlete/zones Description: Returns the the authenticated athlete's heart rate and power zones. Requires profile:read_all. Read-only operation. Scopes: required: profile:read_all. |
| get_segment_by_idA | Get Segment Endpoint: GET /segments/{id} Description: Returns the specified segment. read_all scope required in order to retrieve athlete-specific segment information, or to retrieve private segments. Read-only operation. Scopes: required: read_all. |
| get_logged_in_athlete_starred_segmentsA | List Starred Segments Endpoint: GET /segments/starred Description: List of the authenticated athlete's starred segments. Private segments are filtered out unless requested by a token with read_all scope. Read-only operation. |
| put_star_segmentB | Star Segment Endpoint: PUT /segments/{id}/starred Description: Stars/Unstars the given segment for the authenticated athlete. Requires profile:write scope. This operation modifies Strava data. Scopes: required: profile:write. |
| get_efforts_by_segment_idB | List Segment Efforts Endpoint: GET /segment_efforts Description: Returns a set of the authenticated athlete's segment efforts for a given segment. Requires subscription. Read-only operation. |
| get_explore_segmentsB | Explore segments Endpoint: GET /segments/explore Description: Returns the top 10 segments matching a specified query. Read-only operation. |
| get_segment_effort_by_idA | Get Segment Effort Endpoint: GET /segment_efforts/{id} Description: Returns a segment effort from an activity that is owned by the authenticated athlete. Requires subscription. Read-only operation. |
| post_create_activityB | Create an Activity Endpoint: POST /activities Description: Creates a manual activity for an athlete, requires activity:write scope. This operation modifies Strava data. Scopes: required: activity:write. |
| get_activity_by_idA | Get Activity Endpoint: GET /activities/{id} Description: Returns the given activity that is owned by the authenticated athlete. Requires activity:read for Everyone and Followers activities. Requires activity:read_all for Only Me activities. We strongly encourage you to display the appropriate attribution that identifies Garmin as the data source and the device name in your application. Please see example below from VeloViewer (that provides an attribution for a Garmin Forerunner device).
Read-only operation. Scopes: one of: activity:read, activity:read_all. |
| put_update_activity_by_idB | Update Activity Endpoint: PUT /activities/{id} Description: Updates the given activity that is owned by the authenticated athlete. Requires activity:write. Also requires activity:read_all in order to update Only Me activities This operation modifies Strava data. Scopes: required: activity:write; conditional: activity:read_all. |
| get_logged_in_athlete_activitiesB | List Athlete Activities Endpoint: GET /athlete/activities Description: Returns the activities of an athlete for a specific identifier. Requires activity:read. Only Me activities will be filtered out unless requested by a token with activity:read_all. Read-only operation. Scopes: one of: activity:read, activity:read_all. |
| get_laps_by_activity_idA | List Activity Laps Endpoint: GET /activities/{id}/laps Description: Returns the laps of an activity identified by an identifier. Requires activity:read for Everyone and Followers activities. Requires activity:read_all for Only Me activities. Read-only operation. Scopes: one of: activity:read, activity:read_all. |
| get_zones_by_activity_idB | Get Activity Zones Endpoint: GET /activities/{id}/zones Description: Summit Feature. Returns the zones of a given activity. Requires activity:read for Everyone and Followers activities. Requires activity:read_all for Only Me activities. Read-only operation. Scopes: one of: activity:read, activity:read_all. |
| get_comments_by_activity_idA | List Activity Comments Endpoint: GET /activities/{id}/comments Description: Returns the comments on the given activity. Requires activity:read for Everyone and Followers activities. Requires activity:read_all for Only Me activities. Read-only operation. Scopes: one of: activity:read, activity:read_all. |
| get_kudoers_by_activity_idA | List Activity Kudoers Endpoint: GET /activities/{id}/kudos Description: Returns the athletes who kudoed an activity identified by an identifier. Requires activity:read for Everyone and Followers activities. Requires activity:read_all for Only Me activities. Read-only operation. Scopes: one of: activity:read, activity:read_all. |
| get_club_by_idA | Get Club Endpoint: GET /clubs/{id} Description: Returns a given a club using its identifier. Read-only operation. |
| get_club_members_by_idB | List Club Members Endpoint: GET /clubs/{id}/members Description: Returns a list of the athletes who are members of a given club. Read-only operation. |
| get_club_admins_by_idB | List Club Administrators Endpoint: GET /clubs/{id}/admins Description: Returns a list of the administrators of a given club. Read-only operation. |
| get_club_activities_by_idA | List Club Activities Endpoint: GET /clubs/{id}/activities Description: Retrieve recent activities from members of a specific club. The authenticated athlete must belong to the requested club in order to hit this endpoint. Pagination is supported. Athlete profile visibility is respected for all activities. Read-only operation. |
| get_logged_in_athlete_clubsA | List Athlete Clubs Endpoint: GET /athlete/clubs Description: Returns a list of the clubs whose membership includes the authenticated athlete. Read-only operation. |
| get_gear_by_idA | Get Equipment Endpoint: GET /gear/{id} Description: Returns an equipment using its identifier. Read-only operation. |
| get_route_by_idB | Get Route Endpoint: GET /routes/{id} Description: Returns a route using its identifier. Requires read_all scope for private routes. Read-only operation. Scopes: required: read_all. |
| get_routes_by_athlete_idB | List Athlete Routes Endpoint: GET /athletes/{id}/routes Description: Returns a list of the routes created by the authenticated athlete. Private routes are filtered out unless requested by a token with read_all scope. Read-only operation. |
| get_route_as_gpxB | Export Route GPX Endpoint: GET /routes/{id}/export_gpx Description: Returns a GPX file of the route. Requires read_all scope for private routes. Read-only operation. Scopes: required: read_all. |
| get_route_as_tcxA | Export Route TCX Endpoint: GET /routes/{id}/export_tcx Description: Returns a TCX file of the route. Requires read_all scope for private routes. Read-only operation. Scopes: required: read_all. |
| post_create_uploadB | Upload Activity Endpoint: POST /uploads Description: Uploads a new data file to create an activity from. Requires activity:write scope. This operation modifies Strava data. Scopes: required: activity:write. |
| get_upload_by_idA | Get Upload Endpoint: GET /uploads/{uploadId} Description: Returns an upload for a given identifier. Requires activity:write scope. Read-only operation. Scopes: required: activity:write. |
| get_activity_streamsA | Get Activity Streams Endpoint: GET /activities/{id}/streams Description: Returns the given activity's streams. Requires activity:read scope. Requires activity:read_all scope for Only Me activities. Read-only operation. Scopes: one of: activity:read, activity:read_all. |
| get_segment_effort_streamsA | Get Segment Effort Streams Endpoint: GET /segment_efforts/{id}/streams Description: Returns a set of streams for a segment effort completed by the authenticated athlete. Requires read_all scope. Read-only operation. Scopes: required: read_all. |
| get_segment_streamsB | Get Segment Streams Endpoint: GET /segments/{id}/streams Description: Returns the given segment's streams. Requires read_all scope for private segments. Read-only operation. Scopes: required: read_all. |
| get_route_streamsB | Get Route Streams Endpoint: GET /routes/{id}/streams Description: Returns the given route's streams. Requires read_all scope for private routes. Read-only operation. Scopes: required: read_all. |
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 34 tools
Each tool targets a distinct resource and action, with clear entity-specific names (e.g., get_activity_by_id vs get_activity_streams vs get_comments_by_activity_id). Even similar operations like route exports are distinguished by format (GPX vs TCX). No overlap or ambiguity exists.
All tools follow a uniform verb_noun pattern using HTTP method prefixes (get_, put_, post_) followed by the resource and optional identifier (e.g., put_update_activity_by_id, post_create_upload). The naming is entirely consistent across the set.
With 34 tools, the server far exceeds the typical well-scoped range (3-15) and even the borderline heavy range (16-25). While the Strava API is broad, this many tools makes the surface overweight and risks overwhelming agents during tool selection.
The tool set covers major resources (athlete, activities, segments, routes, clubs, gear, uploads, streams) with read and some write operations, but lacks delete operations for activities and uploads, creating lifecycle gaps. Additionally, creation is missing for some resources like routes, although these may not be API-supported. Overall, notable gaps exist but the core workflows are covered.
