Formula 1 MCP Server
# 🏁 Formula 1 MCP Server 🏎️
This project defines a MCP server for Formula 1 data, providing fans, analysts, and developers with easy access to a vast range of F1 statistics and information. Built with Python and powered by the Gradio framework, it offers a user-friendly web interface to explore historical and recent F1 data from the [FastF1](https://docs.fastf1.dev/) library and the official [OpenF1 API](https://openf1.org/).
## Video Demo (Claude Desktop)
[](https://www.loom.com/embed/4ef9cf2e691143db8e5d807a1aef9672?sid=6dabbf2e-71ba-406d-ad86-8b480a29e222)
## Architecture
Architectural overview of the MCP server and client. The MCP server is hosted using a `Gradio` back-end and can be either run locally or on a remote server.
<img src="src/assets/architecture.png" width="800" />
### Gradio Key Features
The interface is organized into several `Gradio` tabs, each dedicated to a specific type of F1 data:
* **Championship Standings:** View final driver and constructor championship standings for any season from 1950 to the present.
* **Event Information:** Get detailed information for any Grand Prix, including schedules and circuit details.
* **Season Calendar:** Display the complete race calendar for a given year.
* **Track Visualizations:** Generate and view plots of the fastest race lap, visualizing speed, gear changes, and cornering G-forces.
* **Session Results:** Fetch detailed results for any race session (Practice, Qualifying, or Race).
* **Driver & Constructor Info:** Look up background information and statistics for drivers and teams.
* **OpenF1 API Tools:** An advanced toolkit for developers to directly query the OpenF1 API, build custom requests, and view raw JSON responses.
### Tech Stack
* **Backend:** Python
* **Web Framework:** Gradio
* **Data Sources:**
* `fastf1` Python library for historical data.
* `openf1` for live and recent data via their public API.
* **Key Libraries:** `pandas`, `matplotlib`
## MCP Server
The MCP server is defined inside `app.py`.
## MCP Client
The MCP client and AI agent is defined inside `mcp_client.py` and allows interaction with the MCP server through server side events (SSE) transport.
## MCP configuration file
For MCP clients that support SSE transport (for Claude Desktop, see below), the following configuration can be used:
```json
{
"mcpServers": {
"gradio": {
"url": "https://agents-mcp-hackathon-f1-mcp-server.hf.space/gradio_api/mcp/sse"
}
}
}
```
For Claude Desktop, the following configuration can instead be used, but make sure you have Node.js installed:
```json
{
"mcpServers": {
"gradio": {
"command": "npx",
"args": [
"mcp-remote",
"https://agents-mcp-hackathon-f1-mcp-server.hf.space/gradio_api/mcp/sse",
"--transport",
"sse-only"
]
}
}
}
```TDQS
Scored across 17 tools
Core F1 retrieval tools (standings, event info, session results, driver/constructor info) are clearly distinct. However, the OpenF1 API plumbing tools (get_api_endpoints, get_api_endpoint, get_endpoint_info, get_filter_info, get_filter_string, apply_filters, send_request) overlap heavily in purpose, and update_drivers/update_constructors have no descriptions, making their boundaries unclear.
All tools share a consistent f1_mcp_server_ prefix and mostly use verb_noun or verb_resource naming (get_*, update_*). Minor deviations exist: championship_standings and track_visualization lack explicit verbs, and get_api_endpoint vs get_api_endpoints differ only by plural.
17 tools is on the heavy side for an F1 data server. While core domain tools are justified, seven generic OpenF1 API access/filter tools appear to expose implementation plumbing rather than distinct user-facing capabilities, inflating the count.
The surface covers key F1 entities (drivers, constructors, standings, events, calendars, session results) and generic OpenF1 request tools provide fallback access to unmodeled data like laps, telemetry, or pit stops. Explicit list/search tools and clear update semantics are missing, but agents can work around most gaps.