Comprehensive Formula 1 data via Model Context Protocol (MCP) for Claude Desktop
Production-ready MCP server with 25 optimized F1 data tools, comprehensive logging, health checks, and flexible configuration. Aggregates data from 4 free sources (FastF1, OpenF1, Ergast, 25+ RSS feeds) covering Formula 1 from 1950 to present.
git clone https://github.com/praneethravuri/pitstop.git
cd pitstop
uv sync
# Optional: Configure environment variables
cp .env.example .env
# Edit .env to customize settingsWindows: %APPDATA%\Claude\claude_desktop_config.json
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"pitstop": {
"command": "uv",
"args": [
"run",
"--directory",
"/absolute/path/to/pitstop",
"mcp",
"run",
"/absolute/path/to/pitstop/server.py"
]
}
}
}Note: Replace /absolute/path/to/pitstop with your installation path. Use double backslashes (\\) on Windows.
Restart Claude Desktop to activate.
| Source | Coverage | Data Types | |
|---|---|---|---|
| FastF1 | 2018-present | Session data, telemetry, weather, race control | |
| Ergast API | 1950-2024 | Historical results, standings, driver/team info | |
| RSS Feeds | Latest F1 News | Latest news from 25+ sources | |
| OpenF1 API | 2023-present | Real-time radio, pit stops, intervals |
Note: RSS feeds only contain recent articles. For historical F1 news (e.g., 2013 Indian GP), use web search instead.
| Tool | Description | Key Parameters |
|---|---|---|
get_session_details |
Complete session overview with results and weather | year, gp, session |
get_session_results |
Final classification/results | year, gp, session |
get_laps |
Lap-by-lap data including fastest laps, sectors, pit stops | year, gp, session, driver?, lap_type? |
get_session_drivers |
List of drivers in session | year, gp, session |
get_tire_strategy |
Tire compound usage and stint data | year, gp, session, driver? |
get_qualifying_sessions |
Split qualifying into Q1/Q2/Q3 segments | year, gp, segment? |
get_track_evolution |
Track lap time improvement through session | year, gp, session, max_laps? |
| Tool | Description | Key Parameters |
|---|---|---|
get_lap_telemetry |
High-frequency telemetry data | year, gp, session, driver, lap_number |
compare_driver_telemetry |
Side-by-side telemetry comparison | year, gp, session, driver1, driver2, lap1?, lap2? |
get_analysis |
Race pace, tire degradation, stints | year, gp, session, analysis_type, driver? |
get_session_weather |
Historical weather data throughout session | year, gp, session |
| Tool | Description | Key Parameters |
|---|---|---|
get_race_control_messages |
All race control messages (flags, penalties, etc.) | year, gp, session, message_type? |
get_circuit |
Circuit layout, corners, track status | year, gp, data_type, session? |
Note: get_race_control_messages supports filtering with message_type: "all", "penalties", "investigations", "flags", "safety_car"
| Tool | Description | Key Parameters |
|---|---|---|
get_driver_radio |
Team radio messages with transcripts | year, country, session_name?, driver_number? |
get_live_pit_stops |
Pit stop timing and statistics | year, country, session_name?, driver_number? |
get_live_intervals |
Real-time gaps and intervals | year, country, session_name?, driver_number? |
get_meeting_info |
Meeting and session schedule | year, country |
get_stints_live |
Real-time tire stint tracking | year, country, session_name?, driver_number?, compound? |
| Tool | Description | Key Parameters |
|---|---|---|
get_standings |
Driver/constructor standings | year, round?, type?, driver_name?, team_name? |
get_schedule |
F1 calendar with sessions | year, include_testing?, round?, event_name?, only_remaining? |
| Tool | Description | Key Parameters |
|---|---|---|
get_reference_data |
Driver info, team details, circuits | reference_type, year?, name? |
get_f1_news |
Latest F1 news | source?, limit?, keywords?, driver?, team? |
Parameter Conventions:
year: Season year (2018+ for FastF1, 1950+ for Ergast, 2023+ for OpenF1)gp: Grand Prix name (e.g., "Monaco", "Silverstone") or round numbersession: Session type -"FP1","FP2","FP3","Q","S","R"driver: 3-letter code (e.g., "VER") or driver number?suffix: Optional parameter
# Session Analysis
"Get qualifying results from Monaco 2024"
"What was Verstappen's tire strategy in the race?"
"Show me sector times for all drivers"
# Telemetry
"Compare telemetry between Verstappen and Hamilton in qualifying"
"Get Leclerc's fastest lap data"
# Race Control
"What penalties were given in Monaco?"
"Show me all flag periods from the race"
"Get safety car periods"
# Live Data
"Get team radio messages from the race"
"Show me pit stop times for all drivers"
"What was the gap between Verstappen and Hamilton?"
# News & Schedule (Recent only)
"What's the latest F1 news?"
"Show me recent news about Ferrari"
"What are the transfer rumors this week?"
"When is the next race?"
# Note: For historical news (e.g., "2013 Indian GP"), use web search
Pitstop uses environment variables for configuration. A .env file is included for easy setup:
# Copy the example file and customize
cp .env.example .envAvailable Configuration Options:
| Variable | Default | Description |
|---|---|---|
PITSTOP_ENV |
development |
Environment mode:development or production |
PITSTOP_LOG_LEVEL |
DEBUG (dev) / INFO (prod) |
Logging level:DEBUG, INFO, WARNING, ERROR, CRITICAL |
PITSTOP_ENABLE_CACHING |
true |
Enable caching for improved performance |
PITSTOP_CACHE_TTL |
300 |
Cache time-to-live in seconds (5 minutes) |
PITSTOP_RATE_LIMIT_ENABLED |
false |
Enable rate limiting per client |
PITSTOP_RATE_LIMIT |
1000 |
Maximum requests per hour per client |
PITSTOP_TIMEOUT |
30 |
Default timeout in seconds |
PITSTOP_TELEMETRY_TIMEOUT |
60 |
Telemetry timeout in seconds |
Production Mode (PITSTOP_ENV=production):
- β Structured JSON logging for log aggregation
- β Error message masking for security
- β Optimized performance settings
- β Health check resources enabled
Development Mode (PITSTOP_ENV=development):
- β Human-readable text logging
- β Detailed error messages with stack traces
- β Debug-level logging by default
- β Full error context for debugging
FastF1 caches session data in cache/ for performance. Clear if needed:
rm -rf cache/ # Unix/macOS
rmdir /s cache # WindowsAccess server status and health information via the server://status resource:
{
"server": "Pitstop F1 MCP Server",
"version": "1.0.0",
"status": "operational",
"environment": "production",
"tools_count": 25,
"data_sources": {
"fastf1": "operational (2018-present)",
"openf1": "operational (2023-present)",
"ergast": "operational (1950-2024)",
"rss_feeds": "operational (25+ sources)"
}
}Test individual tools:
# Test session tool
python tools/session/results.py
# Test telemetry
python tools/telemetry/lap_telemetry.py
# Test OpenF1 live data
python tools/live/radio.py
# Test race control
python tools/control/messages.pyContributions welcome! Please submit a Pull Request.
MIT License - see LICENSE file
- FastF1 - Formula 1 data library
- OpenF1 - Real-time F1 data API
- Ergast API - Historical F1 database
- Model Context Protocol - MCP specification
Built with β€οΈ for F1 fans and data enthusiasts