mcp-strava
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": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| pingA | A simple test tool that verifies the server is running |
| get_athlete_profileA | Get authenticated athlete's Strava profile. Returns: name, username, bio, location, weight, premium status, measurement preferences. |
| get_athlete_statsA | Get aggregated activity statistics by sport type. Returns: recent (4 weeks), YTD, all-time totals for ride/run/swim. Each: count, distance (m), moving_time (s), elevation_gain (m). |
| list_activitiesA | List activities with filtering and pagination. Returns: id, name, type, sport_type, start_date, distance (m), moving_time (s), elapsed_time (s), total_elevation_gain (m), average_speed (m/s), heartrate, watts. Use week_offset for calendar weeks (0=this week, -1=last week). Monday-Sunday. |
| get_activity_detailA | Get activity metadata by ID. Returns: name, description, splits, laps, segment_efforts, gear, calories. segment_efforts contains Strava segments from THIS activity only (no historical data). For segment analysis over time, pass segment_efforts[].id to get_segment_effort_streams. For full activity time-series, use get_activity_streams. |
| get_athlete_zonesA | Get athlete's configured HR and power zones from Strava. Returns: heart_rate.zones[], power.zones[] with min/max for each zone. Requires profile:read_all scope. |
| get_activity_zonesB | Get zone distribution for an activity (heart rate, pace, power). Returns zone boundaries, time in seconds, and percentage per zone. For activity-specific zone analysis with time/ratios. |
| get_segment_effort_streamsA | Analyze a Strava segment with full historical comparison. ONE call returns EVERYTHING: segment info, current effort stats, AND comparison with ALL previous attempts (best_time, average_time, total_efforts, rank, previous_efforts list). No need to list_activities - this tool automatically fetches all historical data. Use when user asks about segment history, progress, PRs, or performance over time. Input: segment_effort_id from get_activity_detail's segment_efforts array. |
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 8 tools
Each tool has a clearly distinct purpose, covering activities, zones, athlete info, segments, and listing. Descriptions provide detailed distinctions, e.g., get_activity_zones vs get_athlete_zones are for activity-specific vs athlete-configured zones.
Almost all tools follow a consistent verb_noun pattern with snake_case (get_*, list_*). 'ping' is a slight outlier but is a common test tool and does not confuse the overall pattern.
8 tools is appropriate for a Strava integration, covering core read operations for activities, athletes, zones, and segments without being overly numerous or sparse.
The tool set covers main read operations, but there is a notable gap: get_activity_detail mentions using get_activity_streams for time-series data, yet that tool is not present. This creates a dead-end for agents. Missing write operations like upload or update activities, but those may be out of scope.