Skip to main content
Glama

get_batch_workouts

Retrieve detailed workout information for multiple dates in a single request to analyze fitness progress and track exercise data efficiently.

Instructions

Get detailed workout information for multiple dates in a single call.

Args: dates: List of dates in YYYY-MM-DD format

Returns: Markdown-formatted workout details for all requested dates

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
datesYes

Implementation Reference

  • The primary handler function for the 'get_batch_workouts' tool, decorated with @mcp.tool for registration. It validates input dates, fetches workout data for each date using a helper function, enriches with exercise details, and returns formatted markdown output.
    @mcp.tool
    def get_batch_workouts(dates: list[str]) -> ToolResult:
        """
        Get detailed workout information for multiple dates in a single call.
        
        Args:
            dates: List of dates in YYYY-MM-DD format
        
        Returns:
            Markdown-formatted workout details for all requested dates
        """
        if not dates:
            raise ValueError("dates list cannot be empty")
        
        # Validate all date formats first
        for date_str in dates:
            try:
                datetime.strptime(date_str, "%Y-%m-%d")
            except ValueError as e:
                raise ValueError(f"Invalid date format '{date_str}'. Use YYYY-MM-DD format: {e}")
        
        # Build combined markdown output
        all_workouts = []
        
        for date_str in sorted(dates):
            # Get workout data from API
            workout_data = get_workout_for_date(date_str)
            
            output_lines = []
            output_lines.append(f"# Workout for {date_str}\n")
            
            if 'data' not in workout_data or not workout_data['data']:
                output_lines.append("No workout found for this date.\n")
            else:
                for session in workout_data['data']:
                    session_date = datetime.fromtimestamp(session['date']).strftime('%Y-%m-%d %H:%M:%S')
                    duration_minutes = session['total_time'] // 60
                    duration_seconds = session['total_time'] % 60
                    total_weight = session['total_weight']
                    
                    output_lines.append(f"**Started:** {session_date}")
                    output_lines.append(f"**Duration:** {duration_minutes}m {duration_seconds}s")
                    output_lines.append(f"**Weight Lifted:** {total_weight} lbs\n")
                    
                    output_lines.append("## Exercises\n")
                    
                    for i, log in enumerate(session['logs'], 1):
                        exercise_id = log['exercise_id']
                        exercise = EXERCISE_DB.get(exercise_id, {})
                        
                        name = exercise.get('name', f'Unknown Exercise ({exercise_id})')
                        muscle_groups = ', '.join(exercise.get('body_parts', ['Unknown']))
                        equipment = ', '.join(exercise.get('equipment', ['Unknown']))
                        
                        output_lines.append(f"### {i}. {name}")
                        output_lines.append(f"- **Muscle Groups:** {muscle_groups}")
                        output_lines.append(f"- **Equipment:** {equipment}")
                        output_lines.append("")
                        
                        # Add sets information
                        for j, s in enumerate(log['log_sets'], 1):
                            weight = s.get('weight', 0)
                            reps = s.get('reps', 0)
                            output_lines.append(f"  - Set {j}: {weight} lbs × {reps} reps")
                        
                        output_lines.append("")  # Blank line between exercises
            
            all_workouts.append("\n".join(output_lines))
        
        # Join all workouts with separator
        markdown_text = "\n---\n\n".join(all_workouts)
        return ToolResult(content=[TextContent(type="text", text=markdown_text)])
  • Helper function used by get_batch_workouts to fetch raw workout data from the Jefit API for a specific date.
    def get_workout_for_date(date_str):
        """Get workout logs for a specific date"""
        date_unix = int(time.mktime(time.strptime(date_str, "%Y-%m-%d")))
        # Get Access Token and User ID
        access_token = get_access_token()
        user_id = get_user_id(access_token)
        url = f"https://www.jefit.com/api/v2/users/{user_id}/sessions?startDate={date_unix}"
        headers = {
            'content-type': 'application/json',
            'Cookie': f'jefitAccessToken={access_token}'
        }
        
        response = requests.get(url, headers=headers)
        return response.json()

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