Skip to main content
Glama

Formula1 MCP Server

README.md12.7 kB
[![MseeP.ai Security Assessment Badge](https://mseep.net/pr/panth1823-formula1-mcp-badge.png)](https://mseep.ai/app/panth1823-formula1-mcp) # The Formula1 MCP Server ! 🏎️💨 A TypeScript-based Formula 1 MCP server, bringing the thrill of **real-time and historical F1 racing data** straight to your fingertips via the Model Context Protocol. **API Status:** ✅ 21/22 OpenF1 endpoints + 10 Ergast endpoints working **Last Tested:** November 10, 2025 **Active Tools:** 29 MCP tools (All historical data FREE, live streaming requires paid OpenF1 account) **Access:** 🎉 **No authentication required** for historical data! ### Features - ✅ **Free historical data access** - No authentication required! - ✅ **Comprehensive F1 data** - Sessions, drivers, weather, telemetry (2023-present via OpenF1) - ✅ **Legacy data** - Historical race information (1950-present via Ergast API) - ✅ Access F1 session data via standardized REST APIs - ✅ Real-time telemetry data (car speed, throttle, brake, RPM, DRS, gear) - ✅ Driver and constructor standings - ✅ Weather data (air/track temperature, humidity, wind, rainfall) - ✅ Circuit information with coordinates - ✅ Team radio communications with audio URLs - ✅ Race control messages, flags, and penalties - ✅ Pit stop data and tire strategy - ✅ Lap times and sector analysis - ✅ Position tracking and intervals - ⚠️ **Live streaming** (MQTT) - Requires paid OpenF1 account (currently disabled) ## 📊 API Access & Pricing ### What's Free? (No Account Needed) ✅ **All historical data is completely free!** This includes: - ✅ All sessions from 2023-present (OpenF1) - ✅ All races from 1950-present (Ergast) - ✅ Telemetry, lap times, positions, pit stops - ✅ Team radio recordings, race control messages - ✅ Weather data, driver info, overtakes - ✅ Beta features: Session results, starting grid ### What Requires a Paid Account? ⚠️ **Only real-time streaming during live races:** - ❌ MQTT WebSocket streaming (live updates) - ❌ Real-time data during active F1 sessions - 📝 [Apply for paid access](https://openf1.org/pricing) if needed **Note:** REST API endpoints may still work during race weekends for delayed/recent data without a paid account (to be tested). For detailed endpoint testing results, see **[OPENF1_API_ACCESS_REPORT.md](OPENF1_API_ACCESS_REPORT.md)**. ## Getting Started ### Installation 1. Clone the repo: ```bash git clone https://github.com/Panth1823/formula1-mcp cd formula1-mcp ``` 2. Install: ```bash npm install ``` 3. Build: ```bash npm run build ``` That's it! No API keys or authentication required for historical data. ### Usage Add to your Claude Desktop config: ```json { "mcpServers": { "formula1": { "command": "node", "args": ["<path-to-your-cloned-repo>/build/index.js"], "cwd": "<path-to-your-cloned-repo>", "enabled": true } } } ``` Config locations: - Windows: `%APPDATA%\Claude\claude_desktop_config.json` - MacOS: `~/Library/Application Support/Claude/claude_desktop_config.json` - Linux: `~/.config/Claude/claude_desktop_config.json` ## Available Tools ### 🏎️ Live Data Tools These tools return live data during active F1 sessions (race weekends). When no session is active, they return empty arrays or last available data. **Note:** Real-time MQTT streaming requires a paid OpenF1 account. REST API access during race weekends may work without payment (to be tested). #### 1. `getLiveCarData` Get car telemetry for all drivers (speed, throttle, brake, RPM, DRS, gear). **Parameters:** None **Returns:** Array of car telemetry data (empty if no active session) **Free Access:** ⚠️ To be tested during next race weekend #### 2. `getLivePositions` Get current track positions and gaps. **Parameters:** None **Returns:** Array of position data with gaps (empty if no active session) **Free Access:** ⚠️ To be tested during next race weekend #### 3. `getLiveRaceControl` Get recent race control messages (flags, penalties, safety car). **Parameters:** None **Returns:** Array of race control messages **Data Source:** MQTT stream (live) or REST API (fallback) #### 4. `getLiveTeamRadio` Get recent team radio communications with audio URLs. **Parameters:** None **Returns:** Array of team radio messages **Data Source:** MQTT stream (live) or REST API (fallback) #### 5. `getLiveWeather` Get current weather conditions. **Parameters:** None **Returns:** Weather data object **Data Source:** MQTT stream (live) or REST API (fallback) #### 6. `getStreamingStatus` Check streaming connection status and data availability. **Parameters:** None **Returns:** Connection status and data counters #### 7. `startStreaming` Manually start the MQTT streaming connection. **Parameters:** None **Requires:** MQTT_ENABLED=true and valid credentials #### 8. `stopStreaming` Stop streaming and clear live data cache. **Parameters:** None --- ### Historical Data Tools #### 1. `getLiveTimingData` (Enhanced) Get real-time lap timing data for the current/latest session. Now uses streaming when active! **Parameters:** - None required **Note:** Returns live data from MQTT stream if active, otherwise uses REST API. May return empty if no live session is active. #### 2. `getCurrentSessionStatus` Get status information about the current session. **Parameters:** - None required **⚠️ Warning:** This endpoint may not work reliably. OpenF1 API doesn't have a standard `/session_status` endpoint. #### 3. `getDriverInfo` Get real-time driver information from OpenF1 (requires session context). **Parameters:** - `driverId` (string): Driver number (e.g., "1", "44", "33") **Note:** For historical driver data, use `getDriverInformation` instead. #### 4. `getHistoricalSessions` ⭐ **CRITICAL** Find session keys for historical events. **You MUST use this first** to get `session_key` values needed for other tools. **Parameters:** - `year` (number, optional): Season year (e.g., 2023, 2024) - `circuit_short_name` (string, optional): Circuit name (e.g., "Monaco", "Silverstone", "Monza") - `country_name` (string, optional): Country name (e.g., "Italy", "Belgium") - `session_name` (string, optional): Session type (e.g., "Race", "Qualifying", "Practice 1") **Example:** Find 2024 Monaco Race: `year=2024, circuit_short_name="Monaco", session_name="Race"` #### 5. `getHistoricRaceResults` Get race results for a specific historical race. **Parameters:** - `year` (number): Season year (e.g., 2023) - `round` (number): Race number (e.g., 1, 2, 3) #### 6. `getDriverStandings` Get driver championship standings. **Parameters:** - `year` (number): Season year (e.g., 2023) #### 7. `getConstructorStandings` Get constructor championship standings. **Parameters:** - `year` (number): Season year (e.g., 2023) #### 8. `getLapTimes` Get lap times for a specific driver. **Parameters:** - `year` (number): Season year (e.g., 2023) - `round` (number): Race number (e.g., 1, 2, 3) - `driverId` (string): Driver identifier (e.g., "max_verstappen", "lewis_hamilton") #### 9. `getWeatherData` Get weather data for a session. **Parameters:** - `sessionKey` (string, **REQUIRED**): Session identifier from `getHistoricalSessions` **Returns:** Air/track temperature, humidity, pressure, wind speed/direction, rainfall #### 10. `getCarData` Get detailed car telemetry data. **Parameters:** - `driverNumber` (string, **REQUIRED**): Driver's car number (e.g., "1", "44", "33") - `sessionKey` (string, **REQUIRED**): Session identifier from `getHistoricalSessions` - `filters` (string, optional): Additional filters (e.g., "speed>=300") **Returns:** Speed, throttle %, brake status, RPM, gear, DRS status (18K+ data points per session) #### 11. `getPitStopData` Get pit stop information. **Parameters:** - `driverNumber` (string, optional): Driver's car number - `sessionKey` (string, optional): Session identifier #### 12. `getTeamRadio` Get team radio communications. **Parameters:** - `sessionKey` (string, **REQUIRED**): Session identifier from `getHistoricalSessions` - `driverNumber` (string, optional): Driver's car number to filter **Returns:** Radio message URLs and timestamps #### 13. `getRaceControlMessages` Get race control messages (flags, incidents, safety car periods). **Parameters:** - `sessionKey` (string, **REQUIRED**): Session identifier from `getHistoricalSessions` **Returns:** Messages, categories, flags (yellow, red, safety car), driver numbers affected #### 14. `getRaceCalendar` Get the F1 race calendar. **Parameters:** - `year` (number): Season year (e.g., 2023) #### 15. `getCircuitInfo` Get detailed circuit information. **Parameters:** - `circuitId` (string): Circuit identifier (e.g., "monza", "spa") #### 16. `getSeasonList` Get a list of available F1 seasons. **Parameters:** - `limit` (number, optional): Number of seasons to return #### 17. `getQualifyingResults` Get qualifying session results. **Parameters:** - `year` (number): Season year (e.g., 2023) - `round` (number): Race number (e.g., 1, 2, 3) #### 18. `getDriverInformation` Get detailed driver information from Ergast API. **Parameters:** - `driverId` (string): Driver identifier (e.g., "max_verstappen", "lewis_hamilton") #### 19. `getConstructorInformation` Get detailed constructor information from Ergast API. **Parameters:** - `constructorId` (string): Constructor identifier (e.g., "red_bull", "mercedes") #### 20. `clearCache` Clear the local cache for F1 data. **Parameters:** - None required ### Data Sources - **Live Streaming:** [OpenF1 MQTT](https://openf1.org) - Real-time MQTT/WebSocket streaming with OAuth2 - **Live/Recent Data:** [OpenF1 API](https://openf1.org) - Real-time telemetry, positions, weather (REST) - **Historical Data:** [Ergast API](http://ergast.com/mrd/) - Complete F1 history (1950-2024) **Important:** Ergast API is scheduled to stop updates after 2024 season. Plan for alternative historical sources for 2025+. ## Documentation - **[QUICK_START_STREAMING.md](QUICK_START_STREAMING.md)** - Get started with live streaming in 5 minutes - **[LIVE_DATA_IMPLEMENTATION.md](LIVE_DATA_IMPLEMENTATION.md)** - Complete technical documentation - **[COMPREHENSIVE_TEST_RESULTS.md](COMPREHENSIVE_TEST_RESULTS.md)** - API test results and validation - **[API_USAGE_ANALYSIS.md](API_USAGE_ANALYSIS.md)** - Feature usage analysis ## Known Issues 1. **getCurrentSessionStatus** - May not work reliably (endpoint doesn't exist in official OpenF1 API) 2. **Monaco 2024** - Returns 0 sessions (data may not be available for all circuits) 3. **Sprint Races** - Not yet supported (Ergast endpoint returns rate limits) ## Examples **Live Streaming (NEW!):** - "What are the current positions in the race?" → Use `getLivePositions` - "Show me live telemetry for Verstappen" → Use `getLiveCarData` - "Latest race control messages" → Use `getLiveRaceControl` - "Current weather conditions" → Use `getLiveWeather` - "Is streaming active?" → Use `getStreamingStatus` **Finding a Session:** - "Find the 2024 Bahrain Grand Prix race session" → Use `getHistoricalSessions` - "Get session key for 2023 Monaco qualifying" → Use `getHistoricalSessions` **Historical Queries:** - "Show 2023 Monaco GP results" → Use `getHistoricRaceResults` - "Get current 2024 standings" → Use `getDriverStandings` + `getConstructorStandings` - "Hamilton's lap times at Silverstone 2023" → Use `getLapTimes` **Live Data (requires session_key):** - "Weather at Silverstone" → Use `getHistoricalSessions` then `getWeatherData` - "Verstappen's telemetry" → Use `getCarData` with driver number and session key - "Team radio messages" → Use `getTeamRadio` with session key **General Info:** - "Show 2024 calendar" → Use `getRaceCalendar` - "Tell me about Lewis Hamilton" → Use `getDriverInformation` - "Info about Monza circuit" → Use `getCircuitInfo` ## Debug Use [MCP Inspector](https://github.com/modelcontextprotocol/inspector) for debugging. ## Testing The project includes comprehensive API testing with real-world validation: ```bash # Test OpenF1 API (12 tests) npm run test:openf1 # Test Ergast API (14 tests) npm run test:ergast # Test both APIs (26 tests) npm run test:apis ``` **Latest Test Results:** ✅ 26/26 tests passing (100%) See [COMPREHENSIVE_TEST_RESULTS.md](COMPREHENSIVE_TEST_RESULTS.md) for detailed results. ## Help - Bugs? [Report here](https://github.com/Panth1823/formula1-mcp/issues) - Questions? Open an issue - Want to help? Submit a PR ## License This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

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/Panth1823/formula1-mcp'

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