Kerbside F1
Free Formula 1 stats: standings, title maths, teammate battles and records, each linked to source.
作者提供的说明(英文原文)
MCP server that exposes Formula 1 data from the OpenF1 API.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"sport": {
"command": "uvx",
"args": [
"mcp-sport"
]
}
}
}在终端中运行这条命令
claude mcp add sport -- uvx mcp-sport粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"sport": {
"command": "uvx",
"args": [
"mcp-sport"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"sport": {
"type": "stdio",
"command": "uvx",
"args": [
"mcp-sport"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月8日
注册名称已通过 GitHub 账户 andrequeiroz2 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.1.0)于2个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Python (uv)。
同一分类中有:Kerbside F1, Open Food Facts MCP, Modrinth MCP
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:↓ 每周下载量i★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
Free Formula 1 stats: standings, title maths, teammate battles and records, each linked to source.
MCP server for Open Food Facts product, ingredient, allergen, and nutrition lookup.
Search Minecraft mods on Modrinth, filter by loader/game version, browse versions.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
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.
| Layer | Technology |
|---|---|
| Language | Python 3.13+ |
| MCP framework | FastMCP 4.x |
| Validation | Pydantic v2 |
| Data | OpenF1 API (REST, free for historical data 2023+) |
| Project management | uv + pyproject.toml |
| Transport | stdio |
# Clone and install dependencies
git clone https://github.com/andrequeiroz2/mcp-sport.git mcp-sport cd mcp-sport uv sync
.venv/bin/python src/mcp_sport/server.py
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.
Add to the client's MCP configuration:
{
"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.
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:
uv run python -c "
import uvicorn from starlette.middleware import Middleware from starlette.middleware.cors import CORSMiddleware from 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):
git clone --depth 1 https://github.com/modelcontextprotocol/ext-apps.git
cd ext-apps/examples/basic-host npm install npm run build SERVERS='["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.
| Domain | Tool | Description |
|---|---|---|
| Navigation | get_sessions | Sessions (practice, qualifying, sprint, race) |
get_meetings | Grand Prix and testing weekends | |
| Registry | get_drivers | Drivers by session/meeting |
| Results | get_session_results | Final classification of a session |
get_starting_grid | Starting grid | |
get_positions | Position history throughout a session | |
| Race | get_laps | Lap times, sectors and speeds |
get_pit_stops | Pit stops | |
get_stints | Stints and tyre compounds | |
get_intervals | Real-time gaps (leader and car ahead) | |
get_race_control | Flags, safety car, incidents | |
| Context | get_weather | Track weather (per-minute samples) |
get_overtakes | Overtakes | |
get_team_radio | Team radio excerpts (MP3) | |
| Telemetry | get_car_data | Speed, RPM, gear, throttle, brake, DRS (~3.7 Hz) |
get_location | Approximate car position on the circuit (~3.7 Hz) | |
| Championships | get_drivers_championship | Drivers standings (beta) |
get_teams_championship | Teams standings (beta) |
"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.
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
| Document | Contents |
|---|---|
docs/Technical_Reference.md | Stack, versions and official links (source of truth) |
docs/Architectural_Design.md | Implementation patterns and procedure for new endpoints |
docs/Logging_Strategy.md | Logging strategy (stderr + per-request telemetry) |
tasks/ | History of planned and executed tasks |
| Variable | Default | Description |
|---|---|---|
MCP_SPORT_LOG_LEVEL | INFO | Log level on stderr (DEBUG, INFO, WARNING, ERROR) |
session_result and starting_grid return HTTP 404 until official results are publishedcar_data, location) returns 18–24k samples per session/driver. Narrow the call with range filters such as speed_min and date_from/date_toMIT. OpenF1 is an unofficial project, not associated in any way with the Formula 1 companies.