MCP Sport

io.github.andrequeiroz2Published by GitHub account andrequeiroz2v0.1.0Updated Oct 24, 2026

MCP server that exposes Formula 1 data from the OpenF1 API.

VerifiedSTDIODesktop onlyLocation & LifestyleData & Analytics

Overview

AI-generated overview

Exposes Formula 1 data from the OpenF1 API so an assistant can query sessions, results, laps, telemetry and standings.

What you can do
Look up sessions and meetings: practice, qualifying, sprint and race sessions, Grand Prix weekends and driver lists. Retrieve results: final classification, starting grid and position history. Analyze the race: lap times and sectors, pit stops, stints and tyre compounds, gaps, race control flags and safety cars, overtakes and team radio. Read telemetry and context: speed, RPM, gear, throttle, brake, DRS, car location and track weather. Check drivers and teams championship standings (beta). Two interactive views, a standings board and an animated race replay, render only in hosts that support MCP Apps; other clients receive JSON.
When to use it
Use it when an assistant should answer questions about Formula 1 sessions, results, lap times, pit stops, telemetry or standings from 2023 onward, or build race summaries in conversation. Live data and rendered views need extra setup.
Requirements
Runs as a local stdio process; needs Python 3.13 or later with uv for dependencies, and can be launched with uvx. Requires network access to the OpenF1 API; historical data from 2023 is free, live data needs a paid OpenF1 subscription. Optional MCP_SPORT_LOG_LEVEL variable sets the log level.
Before you install
Telemetry and location queries can return tens of thousands of samples per session and driver, so narrow them with filters such as speed or date ranges. Session results and starting grid may return HTTP 404 until officially published, and championship endpoints are in beta. The interactive views require running the server over HTTP with permissive CORS and only render in MCP Apps hosts.

Installation

In SourceWeft

  1. Open MCP Sport in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

MCP Sport — F1 Telemetry MCP 🏎️

[Animated race replay]

An MCP (Model Context Protocol) server that exposes Formula 1 data from the OpenF1 API as tools for AI assistants (Claude Desktop, Cursor, MCP Inspector, etc.).

Full coverage: 18 data tools matching the 18 documented OpenF1 endpoints — sessions, meetings, drivers, results, laps, pit stops, stints, telemetry, weather, championships and more. Two MCP App views sit on top of that data: a drivers standings board and an animated race replay. Hosts that render MCP Apps show the HTML. Cursor and Claude Desktop do not: they return the same payload as JSON.

Stack

LayerTechnology
LanguagePython 3.13+
MCP frameworkFastMCP 4.x
ValidationPydantic v2
DataOpenF1 API (REST, free for historical data 2023+)
Project managementuv + pyproject.toml
Transportstdio

Installation

bash
# Clone and install dependenciesgit clone https://github.com/andrequeiroz2/mcp-sport.git mcp-sportcd mcp-sportuv sync

Usage

Run the server (stdio)

bash
.venv/bin/python src/mcp_sport/server.py

MCP Inspector (web UI to test the tools)

bash
npx @modelcontextprotocol/inspector@latest .venv/bin/python src/mcp_sport/server.py

In the Inspector UI: transport STDIO, command .venv/bin/python, args src/mcp_sport/server.py → Connect.

Claude Desktop / Cursor

Add to the client's MCP configuration:

json
{  "mcpServers": {    "f1-telemetry": {      "command": "/absolute/path/mcp-sport/.venv/bin/python",      "args": ["/absolute/path/mcp-sport/src/mcp_sport/server.py"]    }  }}

The 18 data tools work in both clients. The views do not render there.

Views (MCP Apps)

get_drivers_championship_view and get_race_replay_view return interactive HTML. Cursor and Claude Desktop are incompatible with MCP Apps: they ignore the UI and show the JSON payload. The MCP Inspector also treats the result as text.

The views were validated in the official basic-host from modelcontextprotocol/ext-apps. The server must be HTTP, with CORS exposing the MCP session headers. Otherwise the browser cannot complete the Streamable HTTP handshake.

Terminal 1 — MCP server on port 8765:

bash
uv run python -c "import uvicornfrom starlette.middleware import Middlewarefrom starlette.middleware.cors import CORSMiddlewarefrom mcp_sport.server import mcp
app = mcp.http_app(middleware=[Middleware(    CORSMiddleware,    allow_origins=['*'],    allow_methods=['*'],    allow_headers=['*'],    expose_headers=['mcp-session-id', 'mcp-protocol-version'],)])uvicorn.run(app, host='127.0.0.1', port=8765)"

Terminal 2 — basic-host (needs Node.js; npm start requires bun, so use tsx):

bash
git clone --depth 1 https://github.com/modelcontextprotocol/ext-apps.gitcd ext-apps/examples/basic-hostnpm installnpm run buildSERVERS='["http://127.0.0.1:8765/mcp"]' npx tsx serve.ts

Open http://localhost:8080 (sandbox on :8081) and call get_drivers_championship_view or get_race_replay_view. After a change to the view HTML, hard-refresh the page (Ctrl+Shift+R) before running the tool again. The host caches the ui:// resource.

Available tools (18)

DomainToolDescription
Navigationget_sessionsSessions (practice, qualifying, sprint, race)
get_meetingsGrand Prix and testing weekends
Registryget_driversDrivers by session/meeting
Resultsget_session_resultsFinal classification of a session
get_starting_gridStarting grid
get_positionsPosition history throughout a session
Raceget_lapsLap times, sectors and speeds
get_pit_stopsPit stops
get_stintsStints and tyre compounds
get_intervalsReal-time gaps (leader and car ahead)
get_race_controlFlags, safety car, incidents
Contextget_weatherTrack weather (per-minute samples)
get_overtakesOvertakes
get_team_radioTeam radio excerpts (MP3)
Telemetryget_car_dataSpeed, RPM, gear, throttle, brake, DRS (~3.7 Hz)
get_locationApproximate car position on the circuit (~3.7 Hz)
Championshipsget_drivers_championshipDrivers standings (beta)
get_teams_championshipTeams standings (beta)

Example conversation with the AI

"How many points did Norris score in the last two races?"

The AI orchestrates: get_sessions(session_type="Race") to discover recent sessions → get_session_results(session_key=..., driver_number=4) on each one.

Project structure

src/mcp_sport/├── server.py           # Entrypoint: FastMCP instance + tool registration├── exceptions.py       # Domain exceptions├── logging_config.py   # Logging to stderr (stdout is the protocol channel)├── clients/openf1.py   # Single OpenF1 HTTP client├── schemas/            # Pydantic: input (BaseInput) and output per endpoint├── validators/         # Business validations per endpoint├── services/           # Orchestration per endpoint├── tools/              # MCP tools (thin layer) per endpoint└── apps/               # MCP App views (Custom HTML, ui:// resource)    ├── championship_view.py  # Drivers standings board    └── race_replay_view.py   # Animated race replay

Canonical documentation

DocumentContents
docs/Technical_Reference.mdStack, versions and official links (source of truth)
docs/Architectural_Design.mdImplementation patterns and procedure for new endpoints
docs/Logging_Strategy.mdLogging strategy (stderr + per-request telemetry)
tasks/History of planned and executed tasks

Configuration

VariableDefaultDescription
MCP_SPORT_LOG_LEVELINFOLog level on stderr (DEBUG, INFO, WARNING, ERROR)

Known limitations

  • Historical data from 2023 onwards; real-time data requires a paid OpenF1 subscription
  • session_result and starting_grid return HTTP 404 until official results are published
  • Telemetry (car_data, location) returns 18–24k samples per session/driver. Narrow the call with range filters such as speed_min and date_from/date_to
  • Championship endpoints are in beta on OpenF1

License

MIT. OpenF1 is an unofficial project, not associated in any way with the Formula 1 companies.

Source: README.md at commit 84692f8

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.1.0LatestSep 22, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts