Pitwall F1
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PITWALL_CACHE_DIR | No | Downloaded F1 data is cached on your machine at `~/.cache/pitwall-f1` (override it with `PITWALL_CACHE_DIR`) so repeat questions are fast. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_seasonsA | List all available F1 seasons (2018-present). |
| list_racesB | List all races and sessions for a season with dates and session paths. Args: year: Season year (2018-2026) |
| get_race_infoB | Get session details and list of available data feeds. Args: year: Season year race: Race name (partial match — 'china', 'monaco', 'silverstone') session_type: 'Race', 'Qualifying', 'Sprint', 'Practice 1', etc. |
| get_standingsB | Get race classification — positions, gaps, best laps, pit stops, retirements. Args: year: Season year (2018-2026) race: Race name (partial match — 'china', 'australia', 'monaco') session_type: 'Race', 'Qualifying', 'Sprint', etc. |
| get_lap_timesB | Get lap-by-lap times for one or all drivers. Filterable by lap range. Args: year: Season year race: Race name (partial match) driver: Driver TLA (e.g. 'VER') or empty for all session_type: Session type lap_start: First lap to include lap_end: Last lap to include |
| get_telemetryA | Get car telemetry — speed, RPM, throttle, brake, gear, DRS for a specific lap. Returns ~60-90 samples at ~4Hz. Set lap=0 to see available laps. Args: driver: Driver TLA (e.g. 'VER', 'HAM') — required year: Season year (2018-2026) race: Race name (partial match) lap: Lap number (0 = show available laps) session_type: Session type |
| get_tyre_strategyB | Get tyre strategy for every driver — compound, stint length, new/used tyres. Args: year: Season year race: Race name (partial match) session_type: Session type |
| get_pit_stopsB | Get all pit stops sorted by fastest stop time. Args: year: Season year race: Race name (partial match) session_type: Session type |
| get_race_controlB | Get race control messages — flags, penalties, safety cars, investigations. Args: year: Season year race: Race name (partial match) session_type: Session type category: Filter: 'Flag', 'SafetyCar', 'Drs', 'Other', or empty for all |
| get_weatherB | Get weather conditions during a session — temperature, rain, wind, humidity. Args: year: Season year race: Race name (partial match) session_type: Session type |
| get_speed_trapsB | Get speed trap readings at 4 measurement points (I1, I2, FL, ST) per driver. Args: year: Season year race: Race name (partial match) session_type: Session type |
| get_driver_comparisonA | Compare two drivers head-to-head — position, pace, strategy, pit stops. Args: driver_a: First driver TLA (e.g. 'VER') driver_b: Second driver TLA (e.g. 'HAM') year: Season year race: Race name (partial match) session_type: Session type |
| get_historical_resultsB | Get historical F1 race results from 1950 to present. Args: year: Specific year (0 = current season) race: Circuit name (e.g. 'monza', 'monaco') driver: Driver ID (e.g. 'verstappen', 'hamilton') |
| get_championship_standingsA | Get championship standings from 1950 to present. Args: year: Season year (0 = current) standings_type: 'driver' or 'constructor' |
| get_scheduleB | Get the full race calendar for a specific year (excluding testing). |
| get_session_infoB | Get start time and status of a specific session (R=Race, Q=Quali, FP1, etc). |
| get_race_resultsC | Get the final classification (Position, Driver, Team, Points). |
| get_fastest_lap_dataC | Get detailed stats for a driver's fastest lap (Sector times, Speed trap). |
| plot_telemetry_comparisonC | Generates a Speed Trace comparison image between two drivers. Returns: An ImageContent object that can be displayed in the client. |
| plot_multi_telemetry_comparisonB | Compare full telemetry (speed, throttle, brake, gear) between two laps for same driver. Example: Compare first lap vs last lap for Piastri Brazil 2024 |
| plot_driver_telemetry_comparisonB | Plot comprehensive telemetry comparison (speed, throttle, brake, gear) between two drivers for the same lap. Args: year: Season year gp: Grand Prix name driver1: First driver identifier (3-letter code) driver2: Second driver identifier (3-letter code) lap_number: Lap number to compare session: Session type (R=Race, Q=Qualifying, FP1/FP2/FP3=Practice, S=Sprint) Returns: ImageContent with 4 subplots showing speed, throttle, brake, and gear data for both drivers |
| plot_gear_shiftsC | Generates a Gear Shift chart for a single driver. |
| get_weather_dataB | Get detailed weather conditions (Rain, Track Temp, Wind). |
| get_circuit_infoC | Get track layout info (Corners, DRS Zones). |
| get_driver_tyre_detailC | Get detailed tyre stint data for a specific driver via FastF1 — compound, laps, and degradation. |
| get_pit_stop_detailB | Get detailed pit stop data — stationary time, pit-lane time, and tyre compound swap per stop. Stationary time (~2s) is the time the car is stopped in the box; pit-lane time (in->out, ~20-30s) is the full transit. Sourced from F1's PitStopSeries + TyreStintSeries so durations match get_pit_stops / get_fastest_pit_stops. |
| get_driver_standingsB | Get driver championship standings after a specific round or latest. |
| get_constructor_standingsC | Get constructor/team championship standings. |
| get_sprint_resultsB | Get sprint race results (for sprint weekends). |
| compare_sector_timesC | Compare sector times between two drivers. |
| get_lap_times_fastf1C | Get all lap times for a driver via FastF1 — includes compound and tyre life per lap. |
| get_deleted_lapsC | Get all laps deleted due to track limits or other violations. |
| get_position_changesC | Track position changes throughout the race for a driver. |
| get_track_statusB | Get track status changes (yellow flags, safety car, red flag, etc.). |
| get_race_control_messagesB | Get all race control messages during a session. |
| get_driver_infoC | Get detailed driver information (number, team, headshot, etc.). |
| get_team_lapsB | Get all laps for a specific team (both drivers). |
| get_speed_trap_comparisonC | Compare speed trap data across all drivers. |
| analyze_drs_usageB | Analyze DRS usage on a driver's fastest lap. DRS-open is detected via the FastF1 car-data codes 10/12/14 (8 = eligible but not yet open; 0/1 = closed). From 2026, F1 replaced DRS with active aero, so no activations are reported. |
| compare_tire_compoundsB | Compare average lap times across different tire compounds. |
| get_stint_analysisC | Analyze each stint: compound, lap times, degradation. |
| get_dnf_listC | Get list of drivers who did not finish the race and reasons. |
| get_fastest_sectorsC | Find who set the fastest time in each sector. |
| compare_grid_to_finishC | Compare starting grid positions to finishing positions. |
| get_qualifying_progressionB | Show who was eliminated in Q1, Q2 and who made it to Q3. |
| analyze_lap_consistencyC | Analyze lap time consistency (standard deviation, variation). |
| analyze_brake_pointsC | Analyze braking patterns on fastest lap. |
| analyze_rpm_dataC | Analyze engine RPM patterns on fastest lap. |
| get_fastest_pit_stopsA | Get the fastest pit stops of the race, ranked by stationary time. Stationary time = how long the car is stopped in the box (the ~2s 'pit stop' fans mean). Pit-lane time (in->out, ~20-30s) is shown alongside for context. Sourced from F1's PitStopSeries so it matches get_pit_stops / get_pit_stop_detail. |
| compare_tire_age_performanceC | Compare lap times on fresh vs used tires. |
| get_penaltiesC | Get all penalties issued during the race. |
| get_race_winners_historyB | Get race winners for a specific GP over the last N years. |
| detect_overtakesB | Detect when a driver overtook others (position gained between laps). |
| get_gap_to_leaderC | Track gap to race leader throughout the race. |
| analyze_long_run_paceC | Analyze race simulation pace from practice sessions. |
| team_head_to_headC | Compare both drivers in a team head-to-head. |
| get_track_recordB | Get the all-time lap record for a specific circuit (via Ergast). |
| get_session_summaryC | Get a comprehensive quick summary of a session. |
| compare_strategiesC | Compare tire strategies between two drivers. |
| analyze_starting_tiresC | Analyze which tire compounds were used at race start. |
| get_personal_best_lapsC | Get each driver's personal best lap time. |
| get_live_session_statusA | Live F1 session status: session name, flag/track status, lap count. No auth required. Honest 'no live session' message when nothing is running. |
| get_live_positionsA | Live running order with gap-to-leader and interval. No auth required. |
| get_live_lap_timesA | Live last + best lap time per driver. No auth required. |
| get_live_sector_timesA | Live sector times + speed trap for one driver (TLA or car number). No auth required. |
| get_live_weatherA | Live track weather (air/track temp, humidity, wind, rain). No auth required. |
| get_live_tyresB | Live tyre compound, age (laps), and stint number per driver. No auth required. |
| get_live_race_controlA | Live race control: flags, penalties, track-limit deletions, SC/VSC. No auth required. |
| get_live_speed_trapA | Live speed-trap (ST) ranking across the whole field. No auth required. |
| get_live_session_clockA | Live time remaining in the current session. No auth required. |
| get_live_track_status_historyA | Live chronological log of track-status and session-status changes. No auth required. |
| get_live_best_sectorsA | Live personal-best sector times and overall best lap per driver, ranked by lap position. No auth required. |
| get_live_speed_comparisonA | Live best speed at each measurement point (I1, I2, FL, ST) for every driver. No auth required. |
| get_live_stint_historyB | Live full compound sequence and stint lengths for every driver in track-position order. No auth required. |
| get_live_pit_activityA | Live pit-stop count and real-time in-pit / out-lap flags per driver. No auth required. |
| get_live_time_gapsA | Live gap to leader and interval to car ahead per driver, mode-aware (race gap vs quali/practice fastest). No auth required. |
| get_live_mini_sectorsA | Live mini-sector status per driver: g=green/personal-best, p=purple/overall-best, y=yellow, .=no data. No auth required. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 77 tools
Massive overlap across near-duplicate tools: get_standings/get_race_results/get_historical_results, get_weather/get_weather_data/get_live_weather, get_race_control/get_race_control_messages/get_track_status, and get_lap_times/get_lap_times_fastf1/get_live_lap_times are hard to tell apart. The live_ vs historical split helps somewhat, but dozens of pairs have blurred boundaries that will cause misselection.
Nearly all tools follow a predictable snake_case verb_noun pattern (get_*, list_*, analyze_*, compare_*, plot_*). Minor deviations like team_head_to_head break the pattern, but the overall convention is strong and readable.
77 tools is far beyond reasonable scope and is an extreme mismatch, especially given how many are redundant variants of the same operation. The surface should be consolidated to a fraction of this size.
The F1 domain is covered broadly: sessions, results, standings, telemetry, tyre strategy, pit stops, weather, live feeds, and historical data. Gaps are minor; the problem is duplication rather than missing capability.