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
| Name | Required | Description | Default |
|---|---|---|---|
| dates | Yes |
Implementation Reference
- server.py:187-258 (handler)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)])
- workout_info.py:97-111 (helper)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()