compare_drivers
Analyze and compare Formula One driver performance by selecting season year, event, session, and specific drivers for detailed insights.
Instructions
Compare performance between multiple Formula One drivers
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| drivers | Yes | Comma-separated list of driver codes (e.g., 'HAM,VER,LEC') | |
| event_identifier | Yes | Event name or round number (e.g., 'Monaco' or '7') | |
| session_name | Yes | Session name (e.g., 'Race', 'Qualifying', 'Sprint', 'FP1', 'FP2', 'FP3') | |
| year | Yes | Season year (e.g., 2023) |
Implementation Reference
- src/f1_mcp_server/f1_data.py:393-458 (handler)Core handler function that implements the compare_drivers tool. Loads F1 session data using fastf1 library, processes lap times for multiple drivers, computes statistics like fastest lap, average lap time, total laps, and returns comparison data.def compare_drivers(year, event_identifier, session_name, drivers): """ Compare performance between multiple Formula One drivers. Args: year (int or str): The year of the F1 season event_identifier (str): Event name or round number session_name (str): Session type (Race, Qualifying, Sprint, etc.) drivers (str): Comma-separated list of driver codes Returns: dict: Status and driver comparison data or error information """ try: year = int(year) drivers_list = drivers.split(",") session = fastf1.get_session(year, event_identifier, session_name) session.load() driver_comparisons = [] for driver in drivers_list: # Get laps and fastest lap for each driver driver_laps = session.laps.pick_driver(driver) fastest_lap = driver_laps.pick_fastest() # Calculate average lap time valid_lap_times = [] for _, lap in driver_laps.iterrows(): if lap["LapTime"] is not None and not pd.isna(lap["LapTime"]): valid_lap_times.append(lap["LapTime"].total_seconds()) avg_lap_time = ( sum(valid_lap_times) / len(valid_lap_times) if valid_lap_times else None ) # Format lap time as string formatted_fastest = None fastest_lap_number = None if fastest_lap is not None: formatted_fastest = ( str(fastest_lap["LapTime"]) if not pd.isna(fastest_lap["LapTime"]) else None ) fastest_lap_number = ( int(fastest_lap["LapNumber"]) if not pd.isna(fastest_lap["LapNumber"]) else None ) # Compile driver data driver_data = { "DriverCode": driver, "FastestLap": formatted_fastest, "FastestLapNumber": fastest_lap_number, "TotalLaps": len(driver_laps), "AverageLapTime": avg_lap_time, } driver_comparisons.append(driver_data) return {"status": "success", "data": driver_comparisons} except Exception as e: return {"status": "error", "message": str(e)}
- src/f1_mcp_server/server.py:217-223 (registration)Dispatch logic in the MCP server's call_tool handler that routes requests for 'compare_drivers' to the imported compare_drivers function.elif name == "compare_drivers": result = compare_drivers( sanitized_args["year"], str(arguments["event_identifier"]), str(arguments["session_name"]), str(arguments["drivers"]), )
- src/f1_mcp_server/server.py:425-464 (schema)MCP tool registration in list_tools() defining the 'compare_drivers' tool name, description, and input schema for parameter validation.types.Tool( name="compare_drivers", description=( "Compare performance between multiple Formula One drivers" ), inputSchema={ "type": "object", "properties": { "year": { "type": "number", "description": "Season year (e.g., 2023)", }, "event_identifier": { "type": "string", "description": ( "Event name or round number (e.g., 'Monaco' or '7')" ), }, "session_name": { "type": "string", "description": ( "Session name (e.g., 'Race', 'Qualifying', " "'Sprint', 'FP1', 'FP2', 'FP3')" ), }, "drivers": { "type": "string", "description": ( "Comma-separated list of driver codes " "(e.g., 'HAM,VER,LEC')" ), }, }, "required": [ "year", "event_identifier", "session_name", "drivers", ], },
- src/f1_mcp_server/server.py:24-33 (registration)Import of the compare_drivers handler function from f1_data.py into the MCP server.from .f1_data import ( analyze_driver_performance, compare_drivers, get_championship_standings, get_driver_info, get_event_info, get_event_schedule, get_session_results, get_telemetry, )
- Client-side TypeScript schema definition for the compare_drivers tool used in the f1-messenger-app.name: 'compare_drivers', description: 'Compare performance between multiple Formula One drivers in the same session', parameters: { type: SchemaType.OBJECT, properties: { year: { type: SchemaType.NUMBER, description: 'Season year (e.g., 2024, 2023, 2022)', }, event_identifier: { type: SchemaType.STRING, description: 'Event name or round number (e.g., "Monaco", "British", "7")', }, session_name: { type: SchemaType.STRING, description: 'Session type: "Race", "Qualifying", "Sprint", "FP1", "FP2", "FP3"', }, drivers: { type: SchemaType.STRING, description: 'Comma-separated list of driver codes (e.g., "HAM,VER,LEC" or "44,1,16")', } }, required: ['year', 'event_identifier', 'session_name', 'drivers'] }