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

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)

Input Schema (JSON Schema)

{ "properties": { "driver_identifier": { "description": "Driver identifier (number, code, or name; e.g., \"44\", \"HAM\", \"Hamilton\")", "type": "string" }, "event_identifier": { "description": "Event name or round number (e.g., \"Monaco\" or \"7\")", "type": "string" }, "lap_number": { "description": "Lap number (optional, gets fastest lap if not provided)", "type": "number" }, "session_name": { "description": "Session name (e.g., \"Race\", \"Qualifying\", \"Sprint\", \"FP1\", \"FP2\", \"FP3\")", "type": "string" }, "year": { "description": "Season year (e.g., 2023)", "type": "number" } }, "required": [ "year", "event_identifier", "session_name", "driver_identifier" ], "type": "object" }

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 }

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