stravamcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| STRAVA_SCOPE | No | Comma-separated list of OAuth scopes to request. | read,read_all,profile:read_all,activity:read_all |
| STRAVA_CLIENT_ID | Yes | Your Strava API application client ID. | |
| STRAVA_CLIENT_SECRET | Yes | Your Strava API application client secret. |
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": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| strava_auth_statusA | Whether this server is connected to Strava, which athlete it is connected as, the granted OAuth scopes and the access-token expiry. Use this to diagnose authorization errors. |
| strava_get_athlete_summaryA | One-shot overview of the authenticated athlete: profile, gear, recent/year-to-date/all-time ride-run-swim totals (in km and hours) and the most recent activities. Best starting point for questions about overall training. |
| strava_get_athleteA | Raw profile of the authenticated athlete (GET /athlete). Includes bikes, shoes, clubs, FTP and weight when the token has the profile:read_all scope. |
| strava_get_athlete_statsA | Rolled-up ride/run/swim totals for the last 4 weeks, year to date and all time (GET /athletes/{id}/stats). Only counts activities visible to Everyone. |
| strava_get_athlete_zonesA | The athlete's configured heart-rate and power zones (GET /athlete/zones). Requires the profile:read_all scope. |
| strava_list_activitiesA | The authenticated athlete's activities, newest first, as compact summaries (GET /athlete/activities). Use before/after to scope a date range instead of paging blindly. |
| strava_get_activityA | Full detail for one activity (GET /activities/{id}): splits, laps, gear, calories, power and heart-rate averages. Segment efforts and the full map polyline are omitted unless requested. |
| strava_get_activity_lapsA | Laps recorded for an activity (GET /activities/{id}/laps). |
| strava_get_activity_zonesA | Time spent in each heart-rate and power zone during an activity (GET /activities/{id}/zones). Requires a Strava subscription. |
| strava_get_activity_streamsA | Time-series data for an activity (GET /activities/{id}/streams): heart rate, power, speed, altitude, cadence and more. Streams are downsampled to max_points to keep the response small. |
| strava_get_activity_commentsA | Comments left on an activity (GET /activities/{id}/comments). |
| strava_get_activity_kudoersA | Athletes who gave kudos to an activity (GET /activities/{id}/kudos). |
| strava_list_clubsA | Clubs the authenticated athlete belongs to (GET /athlete/clubs). |
| strava_get_clubA | Details of a single club (GET /clubs/{id}). |
| strava_get_gearA | A bike or pair of shoes including total logged distance (GET /gear/{id}). Gear ids look like b1234567 or g1234567 and appear on activities and the athlete profile. |
| strava_list_routesA | Routes created by the authenticated athlete (GET /athletes/{id}/routes). Private routes require the read_all scope. |
| strava_get_routeA | A single route with its segments and estimated moving time (GET /routes/{id}). |
| strava_list_starred_segmentsA | Segments the authenticated athlete has starred (GET /segments/starred). |
| strava_get_segmentA | A single segment including the athlete's personal-record effort when the token has the read_all scope (GET /segments/{id}). |
| strava_get_rate_limitA | Strava's reported request usage from the most recent API call (200 requests per 15 minutes and 2000 per day by default). Check this before issuing many requests. |
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 20 tools
Each tool targets a distinct resource (athlete, activity, club, gear, route, segment) and action (get/list), with utility tools (rate limit, auth status) clearly separated. Even similar tools like get_athlete_summary and get_athlete_stats differ in granularity and purpose, making misselection unlikely.
Most tools follow a consistent verb_noun pattern (get_*, list_*), but strava_auth_status breaks the pattern by using a noun phrase instead of a verb. Additionally, get_athlete_zones vs get_activity_zones could be mistaken without careful reading, though the resource is explicit in each name.
With 20 tools, the server is on the heavy side, exceeding the 15-tool threshold for a well-scoped set. However, each tool maps to a specific Strava API endpoint, and the count is justified by the wide read-only surface of the Strava API, so it is borderline rather than excessive.
The server covers the primary Strava resources (athlete, activities, clubs, gear, routes, segments) with both list and detail views, plus utility tools. Obvious gaps like activity upload or a dedicated segment efforts tool are absent, but agents can obtain segment efforts via activity detail and upload is not a standard read-only operation.