Skip to main content
Glama
rakeshgangwar

Formula One MCP Server

get_telemetry

Access Formula One telemetry data for a specific lap by providing season year, event identifier, session name, and driver identifier through the MCP server interface.

Instructions

Get telemetry data for a specific Formula One lap

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
driver_identifierYesDriver identifier (number, code, or name; e.g., "44", "HAM", "Hamilton")
event_identifierYesEvent name or round number (e.g., "Monaco" or "7")
lap_numberNoLap number (optional, gets fastest lap if not provided)
session_nameYesSession name (e.g., "Race", "Qualifying", "Sprint", "FP1", "FP2", "FP3")
yearYesSeason year (e.g., 2023)

Implementation Reference

  • Core handler function implementing get_telemetry logic: loads F1 session, retrieves driver lap (specific or fastest), fetches telemetry data via fastf1 library, serializes to JSON-compatible format with lap info.
    def get_telemetry(year, event_identifier, session_name, driver_identifier, lap_number=None):
        """Get telemetry data for a specific lap or fastest lap"""
        try:
            year = int(year)
            session = fastf1.get_session(year, event_identifier, session_name)
            session.load()
            
            # Get laps for the specified driver
            driver_laps = session.laps.pick_driver(driver_identifier)
            
            # Get the specific lap or fastest lap
            if lap_number:
                lap = driver_laps[driver_laps['LapNumber'] == int(lap_number)].iloc[0]
            else:
                lap = driver_laps.pick_fastest()
            
            # Get telemetry data
            telemetry = lap.get_telemetry()
            
            # Convert to JSON serializable format
            telemetry_dict = telemetry.to_dict(orient='records')
            clean_data = []
            
            for item in telemetry_dict:
                clean_item = {k: json_serial(v) for k, v in item.items()}
                clean_data.append(clean_item)
            
            # Add lap information
            lap_info = {
                "LapNumber": int(lap['LapNumber']) if not pd.isna(lap['LapNumber']) else None,
                "LapTime": str(lap['LapTime']) if not pd.isna(lap['LapTime']) else None,
                "Compound": lap['Compound'] if not pd.isna(lap['Compound']) else None,
                "TyreLife": int(lap['TyreLife']) if not pd.isna(lap['TyreLife']) else None
            }
            
            result = {
                "lapInfo": lap_info,
                "telemetry": clean_data
            }
            
            return {"status": "success", "data": result}
        except Exception as e:
            return {"status": "error", "message": str(e), "traceback": traceback.format_exc()}
  • MCP tool schema definition for get_telemetry, including input parameters and descriptions for validation.
    {
      name: 'get_telemetry',
      description: 'Get telemetry data for a specific Formula One lap',
      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")',
          },
          driver_identifier: {
            type: 'string',
            description: 'Driver identifier (number, code, or name; e.g., "44", "HAM", "Hamilton")',
          },
          lap_number: {
            type: 'number',
            description: 'Lap number (optional, gets fastest lap if not provided)',
          },
        },
        required: ['year', 'event_identifier', 'session_name', 'driver_identifier'],
      },
    },
  • MCP TypeScript handler for get_telemetry tool: parses arguments, constructs parameter list, calls Python backend via executePythonFunction.
    case 'get_telemetry': {
      const typedArgs = args as TelemetryArgs;
      const telemetryArgs = [
        typedArgs.year.toString(),
        typedArgs.event_identifier.toString(),
        typedArgs.session_name.toString(),
        typedArgs.driver_identifier.toString(),
      ];
      
      if (typedArgs.lap_number !== undefined) {
        telemetryArgs.push(typedArgs.lap_number.toString());
      }
      
      result = await executePythonFunction('get_telemetry', telemetryArgs);
      break;
    }
  • Python dispatch dictionary registering get_telemetry function for invocation from command-line arguments in main().
    functions = {
        "get_event_schedule": get_event_schedule,
        "get_event_info": get_event_info,
        "get_session_results": get_session_results,
        "get_driver_info": get_driver_info,
        "analyze_driver_performance": analyze_driver_performance,
        "compare_drivers": compare_drivers,
        "get_telemetry": get_telemetry,
        "get_championship_standings": get_championship_standings
    }

Tool Definition Quality

Score is being calculated. Check back soon.

Install Server

Other Tools

Related Tools

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/rakeshgangwar/f1-mcp-server'

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