MCP Sport

io.github.andrequeiroz2由 GitHub 帳號 andrequeiroz2 發布v0.1.0更新於 Oct 24, 2026

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

已驗證STDIO僅桌面位置與生活資料與分析

概覽

AI 產生的概覽

從 OpenF1 API 取得一級方程式資料,讓助理查詢賽程、成績、圈速、遙測與積分榜。

可以做什麼
查詢賽程與場次:練習、排位、衝刺與正賽,以及大獎賽週末與車手名單。取得比賽結果:最終排名、起跑順位與位置變化歷程。分析比賽過程:圈速與分段、進站、輪胎階段、車距、旗號與安全車、超車與車隊無線電。讀取遙測與環境資料:速度、轉速、檔位、油門、煞車、DRS、車輛位置與賽道天氣。查看車手與車隊積分榜(Beta)。另有兩個互動檢視(積分榜看板與賽事重播動畫),僅在支援 MCP Apps 的主機中顯示,其他用戶端只會收到 JSON。
適用情境
適合想讓助理查詢 2023 年起的一級方程式賽事資料、車手成績、圈速、進站、遙測與天氣,並以對話方式整理賽事分析時使用。若需要即時資料或互動式圖表,則需額外條件。
執行需求
以本機程序執行(stdio),需 Python 3.13 以上環境與 uv 管理相依套件,並可透過 uvx 啟動。需能連線至 OpenF1 API;歷史資料自 2023 年起免費,即時資料需付費訂閱。選用環境變數 MCP_SPORT_LOG_LEVEL 可調整記錄等級。
安裝前請注意
遙測與位置查詢每次可能回傳上萬筆樣本,建議以速度或時間範圍等條件縮小查詢。賽果與起跑順位在官方公布前可能回傳 404,積分榜端點仍為 Beta。互動檢視需以 HTTP 執行並開啟跨來源設定,且僅在支援 MCP Apps 的主機中顯示。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 MCP Sport,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

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.

來源:README.md,提交 84692f8

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.1.0最新Sep 22, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分