Skip to main content
Glama

list_workout_dates

Retrieve workout dates from JEFit within a specified date range to track fitness sessions and monitor training frequency.

Instructions

List all workout dates within a date range.

Args: start_date: Start date in YYYY-MM-DD format (required) end_date: End date in YYYY-MM-DD format (optional, defaults to today)

Returns: List of workout dates as strings in YYYY-MM-DD format

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
start_dateYes
end_dateNo

Implementation Reference

  • Main handler function for list_workout_dates tool. Includes decorator for MCP registration, type hints serving as input schema, and core logic to filter workout dates using get_workout_history().
    @mcp.tool
    def list_workout_dates(start_date: str, end_date: str | None = None) -> list[str]:
        """
        List all workout dates within a date range.
        
        Args:
            start_date: Start date in YYYY-MM-DD format (required)
            end_date: End date in YYYY-MM-DD format (optional, defaults to today)
        
        Returns:
            List of workout dates as strings in YYYY-MM-DD format
        """
        # Default end_date to today if not provided
        if end_date is None:
            end_date = date.today().isoformat()
        
        # Validate date formats
        try:
            start = datetime.strptime(start_date, "%Y-%m-%d").date()
            end = datetime.strptime(end_date, "%Y-%m-%d").date()
        except ValueError as e:
            raise ValueError(f"Invalid date format. Use YYYY-MM-DD format: {e}")
        
        if start > end:
            raise ValueError("start_date must be before or equal to end_date")
        
        # Get all workout dates from API
        all_dates = get_workout_history()
        
        # Filter to date range
        filtered_dates = []
        for workout_date_str in all_dates:
            workout_date = datetime.strptime(workout_date_str, "%Y-%m-%d").date()
            if start <= workout_date <= end:
                filtered_dates.append(workout_date_str)
        
        return sorted(filtered_dates)
  • Helper function that fetches all workout dates from the JEFit API, filtering for workouts with logs. Called by the list_workout_dates handler.
    def get_workout_history():
        access_token = get_access_token()
        user_id = get_user_id(access_token)
        timezone_offset = os.getenv("JEFIT_TIMEZONE", "-04:00")
    
        headers = {
            'content-type': 'application/json',
            'Cookie': f'jefitAccessToken={access_token}'
        }
        response = requests.get(f"https://www.jefit.com/api/v2/users/{user_id}/sessions/calendar?timezone_offset={timezone_offset}", headers=headers)
        if response.status_code != 200:
            raise Exception(f"Failed to get workout history: {response.status_code} {response.text}")
        else:
            calendar = response.json()
            calendar_data = calendar["data"]
            workouts = []
            for workout in calendar_data:
                # We will skip if the workout has no logs
                if not workout["has_logs"]:
                    continue
                workouts.append(workout["date"])
            return workouts

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ai-mcp-garage/jefit-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server