Skip to main content
Glama

get_lap_telemetry

Retrieve detailed Formula 1 lap telemetry data including speed, throttle, brake, gear, RPM, and DRS status for specific race sessions and drivers.

Instructions

Get high-frequency telemetry for a lap - speed, throttle, brake, gear, RPM, DRS.

Args: year: Season year (2018+) gp: Grand Prix name or round session: 'FP1', 'FP2', 'FP3', 'Q', 'S', 'R' driver: Driver code or number lap_number: Specific lap number

Returns: LapTelemetryResponse with telemetry points

Example: get_lap_telemetry(2024, "Monza", "R", "VER", 15) → VER lap 15 telemetry

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
yearYes
gpYes
sessionYes
driverYes
lap_numberYes

Implementation Reference

  • Core implementation of the get_lap_telemetry tool. Fetches FastF1 session data, loads lap telemetry, processes DataFrame into list of TelemetryPoint models, and returns structured LapTelemetryResponse.
    def get_lap_telemetry(year: int, gp: Union[str, int], session: str, driver: Union[str, int], lap_number: int) -> LapTelemetryResponse:
        """
        Get high-frequency telemetry for a lap - speed, throttle, brake, gear, RPM, DRS.
    
        Args:
            year: Season year (2018+)
            gp: Grand Prix name or round
            session: 'FP1', 'FP2', 'FP3', 'Q', 'S', 'R'
            driver: Driver code or number
            lap_number: Specific lap number
    
        Returns:
            LapTelemetryResponse with telemetry points
    
        Example:
            get_lap_telemetry(2024, "Monza", "R", "VER", 15) → VER lap 15 telemetry
        """
        session_obj = fastf1_client.get_session(year, gp, session)
        session_obj.load(laps=True, telemetry=True, weather=False, messages=False)
    
        event = session_obj.event
    
        driver_laps = session_obj.laps.pick_drivers(driver)
        lap = driver_laps[driver_laps['LapNumber'] == lap_number].iloc[0]
        telemetry_df = lap.get_telemetry()
    
        # Convert to Pydantic models
        telemetry_points = []
        for idx, row in telemetry_df.iterrows():
            point = TelemetryPoint(
                session_time=str(row['SessionTime']) if pd.notna(row.get('SessionTime')) else None,
                distance=float(row['Distance']) if pd.notna(row.get('Distance')) else None,
                speed=float(row['Speed']) if pd.notna(row.get('Speed')) else None,
                rpm=float(row['RPM']) if pd.notna(row.get('RPM')) else None,
                n_gear=int(row['nGear']) if pd.notna(row.get('nGear')) else None,
                throttle=float(row['Throttle']) if pd.notna(row.get('Throttle')) else None,
                brake=float(row['Brake']) if pd.notna(row.get('Brake')) else None,
                drs=int(row['DRS']) if pd.notna(row.get('DRS')) else None,
                x=float(row['X']) if pd.notna(row.get('X')) else None,
                y=float(row['Y']) if pd.notna(row.get('Y')) else None,
                z=float(row['Z']) if pd.notna(row.get('Z')) else None,
            )
            telemetry_points.append(point)
    
        return LapTelemetryResponse(
            session_name=session_obj.name,
            event_name=event['EventName'],
            driver=str(lap['Driver']),
            lap_number=lap_number,
            lap_time=str(lap['LapTime']) if pd.notna(lap.get('LapTime')) else None,
            telemetry=telemetry_points,
            total_points=len(telemetry_points)
        )
  • Pydantic model defining the output schema for get_lap_telemetry response.
    class LapTelemetryResponse(BaseModel):
        """Lap telemetry response."""
    
        session_name: str = Field(description="Session name")
        event_name: str = Field(description="Grand Prix name")
        driver: str = Field(description="Driver abbreviation")
        lap_number: int = Field(description="Lap number")
        lap_time: Optional[str] = Field(None, description="Lap time")
        telemetry: list[TelemetryPoint] = Field(description="Telemetry data points")
        total_points: int = Field(description="Total number of telemetry points")
  • Pydantic model for individual telemetry data points used in lap telemetry response.
    class TelemetryPoint(BaseModel):
        """Single telemetry data point."""
    
        session_time: Optional[str] = Field(None, description="Session time")
        distance: Optional[float] = Field(None, description="Distance in meters")
        speed: Optional[float] = Field(None, description="Speed in km/h")
        rpm: Optional[float] = Field(None, description="Engine RPM")
        n_gear: Optional[int] = Field(None, description="Current gear (1-8)")
        throttle: Optional[float] = Field(None, description="Throttle position (0-100%)")
        brake: Optional[float] = Field(None, description="Brake application (0-100% or boolean)")
        drs: Optional[int] = Field(None, description="DRS status")
        x: Optional[float] = Field(None, description="X position coordinate")
        y: Optional[float] = Field(None, description="Y position coordinate")
        z: Optional[float] = Field(None, description="Z position coordinate")
  • server.py:158-158 (registration)
    MCP tool registration for get_lap_telemetry function.
    mcp.tool()(get_lap_telemetry)
  • Re-export of get_lap_telemetry from tools/telemetry submodule for convenient import in server.py.
    from .telemetry import (
        get_lap_telemetry,
        compare_driver_telemetry,
    )

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/praneethravuri/pitstop'

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