get_activities_by_date_range
Retrieve Strava athlete activities within a specified date range using ISO formatted start and end dates. Customize results by setting a limit for the number of activities returned.
Instructions
Get activities within a specific date range.
Args:
start_date: Start date in ISO format (YYYY-MM-DD)
end_date: End date in ISO format (YYYY-MM-DD)
limit: Maximum number of activities to return (default: 30)
Returns:
Dictionary containing activities data
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | ||
| limit | No | ||
| start_date | Yes |
Implementation Reference
- src/strava_mcp_server/server.py:237-267 (handler)The handler function decorated with @mcp.tool(), implementing the core logic for fetching Strava activities by date range. Includes input validation via type hints and docstring, date parsing, timestamp conversion, API call, and error handling.@mcp.tool() def get_activities_by_date_range(start_date: str, end_date: str, limit: int = 30) -> dict[str, Any]: """ Get activities within a specific date range. Args: start_date: Start date in ISO format (YYYY-MM-DD) end_date: End date in ISO format (YYYY-MM-DD) limit: Maximum number of activities to return (default: 30) Returns: Dictionary containing activities data """ if strava_client is None: return { "error": "Strava client not initialized. Please provide refresh token, client ID, and client secret." # noqa: E501 } try: start = parse_date(start_date) end = parse_date(end_date) # Convert dates to timestamps after = int(datetime.combine(start, datetime.min.time()).timestamp()) before = int(datetime.combine(end, datetime.max.time()).timestamp()) activities = strava_client.get_activities(limit=limit, before=before, after=after) return {"data": activities} except Exception as e: return {"error": str(e)}
- Helper function to parse start_date and end_date strings from ISO format into date objects, used directly in the tool handler.def parse_date(date_str: str) -> date: """ Parse a date string in ISO format (YYYY-MM-DD). Args: date_str: Date string in ISO format Returns: Date object """ try: return date.fromisoformat(date_str) except ValueError as err: raise ValueError(f"Invalid date format: {date_str}. Expected format: YYYY-MM-DD") from err
- StravaClient method called by the tool to fetch activities using timestamps for date range filtering, including API request and response filtering.def get_activities( self, limit: int = 10, before: Optional[int] = None, after: Optional[int] = None ) -> list: """ Get the authenticated athlete's activities. Args: limit: Maximum number of activities to return before: Unix timestamp to filter activities before this time after: Unix timestamp to filter activities after this time Returns: List of activities """ params = {"per_page": limit} if before: params["before"] = before if after: params["after"] = after activities = self._make_request("athlete/activities", params) return self._filter_activities(activities)