API Reference
Complete reference for all 11 Strava MCP tools.
Table of contents
Activities
get_activities
List recent activities with optional date filtering.
Parameters:
before(number, optional): Epoch timestamp - activities before this timeafter(number, optional): Epoch timestamp - activities after this timepage(number, optional): Page number (default: 1)per_page(number, optional): Results per page, max 200 (default: 30)
Example:
{
"after": 1705104000,
"per_page": 10
}
Response: Array of activity summaries with id, name, distance, moving_time, type, etc.
get_activity_by_id
Get detailed information about a specific activity.
Parameters:
id(number, required): Activity ID
Example:
{
"id": 123456789
}
Response: Full activity details including splits, laps, segment efforts, gear, and more.
create_activity
Create a new manual activity.
Parameters:
name(string, required): Activity namesport_type(string, required): Activity type (Run, Ride, Swim, etc.)start_date_local(string, required): ISO 8601 formatted dateelapsed_time(number, required): Total elapsed time in secondsdescription(string, optional): Activity descriptiondistance(number, optional): Distance in meterstrainer(boolean, optional): Indoor trainer activitycommute(boolean, optional): Mark as commute
Example:
{
"name": "Morning Run",
"sport_type": "Run",
"start_date_local": "2026-01-17T07:30:00Z",
"elapsed_time": 3600,
"distance": 10000,
"description": "Easy recovery run"
}
Response: Created activity object.
update_activity
Update an existing activity’s metadata.
Parameters:
id(number, required): Activity ID to updatename(string, optional): New activity namesport_type(string, optional): New activity typedescription(string, optional): New descriptiontrainer(boolean, optional): Mark as trainer activitycommute(boolean, optional): Mark as commutegear_id(string, optional): Gear ID to associate
Example:
{
"id": 123456789,
"name": "Progressive Long Run - 10K",
"description": "Great run! Started easy and built pace in final 5K..."
}
Response: Updated activity object.
This is the key tool for enriching activities with meaningful titles and descriptions!
get_activity_zones
Get heart rate and power zone distribution for an activity.
Parameters:
id(number, required): Activity ID
Example:
{
"id": 123456789
}
Response: Zone distribution data showing time spent in each heart rate/power zone.
Athlete
get_athlete
Get the authenticated athlete’s profile information.
Parameters: None
Example:
{}
Response: Athlete profile including id, username, firstname, lastname, city, state, country, sex, premium status, profile photo, and more.
get_athlete_stats
Get activity statistics for the authenticated athlete.
Parameters:
id(number, optional): Athlete ID (defaults to authenticated athlete)
Example:
{}
Response: Statistics including:
- Recent (last 4 weeks)
- Year-to-date (YTD)
- All-time totals
For each period: count, distance, moving_time, elevation_gain, achievement_count.
Perfect for tracking progress and training volume!
Streams (Telemetry)
get_activity_streams
Get time-series telemetry data for an activity.
Parameters:
id(number, required): Activity IDkeys(array, optional): Stream types to include. Default: all available.
Available stream keys:
time: Time in seconds from startdistance: Distance in meterslatlng: GPS coordinates [lat, lng]altitude: Elevation in metersvelocity_smooth: Speed in m/sheartrate: Heart rate in BPMcadence: Steps/min (running) or RPM (cycling)watts: Power in wattstemp: Temperature in Celsiusmoving: Boolean - was athlete movinggrade_smooth: Gradient/slope percentage
Example:
{
"id": 123456789,
"keys": ["time", "heartrate", "velocity_smooth", "altitude"]
}
Response: Array of stream objects, each containing:
type: Stream typedata: Array of valuesseries_type: “time” or “distance”original_size: Number of data pointsresolution: “low”, “medium”, or “high”
Use streams for deep performance analysis - pacing, heart rate zones, elevation impact, etc.
Clubs
get_club_activities
Get recent activities from club members.
Parameters:
id(number, required): Club IDpage(number, optional): Page number (default: 1)per_page(number, optional): Results per page, max 200 (default: 30)
Example:
{
"id": 987654,
"per_page": 20
}
Response: Array of club activity summaries.
Uploads
create_upload
Upload an activity file (FIT, TCX, or GPX).
Parameters:
file(string, required): Base64 encoded file contentname(string, optional): Activity namedescription(string, optional): Activity descriptiontrainer(boolean, optional): Indoor trainer activitycommute(boolean, optional): Mark as commutedata_type(string, required): File type - “fit”, “tcx”, or “gpx”external_id(string, optional): External identifier
Example:
{
"file": "base64_encoded_file_content_here",
"data_type": "fit",
"name": "Bike Ride",
"description": "Uploaded from Garmin"
}
Response: Upload object with id and status.
get_upload
Check the status of a file upload.
Parameters:
id(number, required): Upload ID (from create_upload)
Example:
{
"id": 123456789
}
Response: Upload status object:
id: Upload IDexternal_id: External identifiererror: Error message if failedstatus: Processing statusactivity_id: Created activity ID (when complete)
Sport Types
Valid sport_type values for activities:
Running
RunTrailRunVirtualRun
Cycling
RideMountainBikeRideGravelRideEBikeRideVirtualRideVelomobile
Water
SwimKayakingCanoeingRowingStandUpPaddlingSurfingKitesurfWindsurf
Winter
AlpineSkiBackcountrySkiNordicSkiSnowboardSnowshoeIceSkate
Other
WalkHikeRockClimbingCrossfitWorkoutWeightTrainingYogaPilatesGolfTennisSoccerBasketballWheelchairHandcycle
Rate Limits
Strava enforces API rate limits:
- 100 requests per 15 minutes
- 1,000 requests per day
The MCP server doesn’t implement rate limiting - clients should handle this appropriately.
Exceeding rate limits returns HTTP 429 errors. Space out requests when performing bulk operations.
Error Handling
All tools return errors in this format:
{
"content": [
{
"type": "text",
"text": "Error: Invalid activity ID"
}
],
"isError": true
}
Common error scenarios:
- 401 Unauthorized: OAuth token expired (server auto-refreshes)
- 404 Not Found: Activity/club/upload doesn’t exist
- 429 Too Many Requests: Rate limit exceeded
- 500 Internal Error: Strava API issue
Next: Examples - See these tools in action