fastf1 mcp

一 主控程序 通过以下方式向AI助手公开F1数据的服务器 FastF1 图书馆。向克劳德(或任何兼容MCP的客户)询问有关比赛结果、圈速、遥测、排名等问题。
______________________________________________________________________
特性
- 21工具 包括排名、比赛结果、圈速、遥测、进站和排位赛
- 4 MCP资源 用于计划、驱动程序、构造程序和电路参考数据
- 5个引导提示 用于比赛回顾、排位赛分析、策略深度潜水和周末预览
- 异步安全 LRU会话缓存 --第一次加载后立即重复查询
- 基于距离的遥测采样——压缩到≤500点的大型原始数据集
- 所有错误都以结构化字典的形式返回——服务器永远不会因输入错误而崩溃
______________________________________________________________________
需求
- Python 3.12+
- 紫外线 (推荐)或pip
______________________________________________________________________
安装
紫外线(推荐)
git clone https://github.com/Surya96t/fastf1-mcp
cd fastf1-mcp
uv sync使用pip
pip install fastf1-mcp-server______________________________________________________________________
运行服务器
# via uv (development)
uv run fastf1-mcp-server
# or directly
python -m fastf1_mcpMCP检查员(开发/调试)
# Option A — official npx inspector
npx @modelcontextprotocol/inspector uv --directory . run fastf1-mcp-server
# Option B — fastmcp wrapper
uv run fastmcp dev inspector -m fastf1_mcp.server --with-editable .两人都打开了检查员 http://localhost:6274.
______________________________________________________________________
Claude桌面配置
添加以下内容 ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)或 %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"fastf1": {
"command": "uv",
"args": ["run", "fastf1-mcp-server"],
"cwd": "/absolute/path/to/fastf1-mcp",
"env": {
"FASTF1_MCP_LOG_LEVEL": "INFO",
"FASTF1_MCP_MAX_CACHED_SESSIONS": "10"
}
}
}
}保存后重新启动Claude Desktop。服务器名称 fastf1 将出现在工具面板中。
______________________________________________________________________
配置
所有设置都是从环境变量中读取的 FASTF1_MCP_ 前缀。
| 变量 | 默认值 | 描述 |
|---|---|---|
FASTF1_MCP_FASTF1_CACHE_PATH | ~/.fastf1_cache | FastF1会话文件的磁盘缓存 |
FASTF1_MCP_MAX_CACHED_SESSIONS | 10 | 内存中保存的最大会话数(LRU) |
FASTF1_MCP_DEFAULT_TELEMETRY_SAMPLES | 200 | 默认遥测采样点 |
FASTF1_MCP_MAX_TELEMETRY_SAMPLES | 500 | 遥测采样点的硬上限 |
FASTF1_MCP_EXPORT_DIR | ./fastf1-exports | CSV导出目录(相对于服务器cwd) |
FASTF1_MCP_AUTO_EXPORT_ROWS | 50 | 当批量数组超过这么多行时,自动导出到CSV。设为 0 禁用。 |
FASTF1_MCP_LOG_LEVEL | INFO | Python日志级别 |
导出完整数据集以供分析
get_lap_times, get_stint_analysis, get_lap_telemetry,以及 compare_telemetry 当用户 需要文件而不是内联JSON。
导出有两种触发方式:
- 汽车出口 (默认为大响应)--当响应
批量阵列将超过 FASTF1_MCP_AUTO_EXPORT_ROWS 行(默认值50), 服务器将其写入CSV FASTF1_MCP_EXPORT_DIR 以及回应 携带 exportPath 一 note 而不是数组。这抓住了 全程单圈时间查询、全程网格分段分析和200分 遥测跟踪——这正是MCP客户端可能会遇到的情况 将响应悄悄地溢出到不透明的临时文件中。
- 明确的
export_path参数 --将其传递给工具调用:
- export_path=True → 写信给 /.csv - export_path="data/laps" → 将自动命名文件写入给定目录 - export_path="data/ver-monaco.csv" → 写入该文件
这 summary 字段始终包含在内,因此仅聊天的用户仍然可以 在没有开场的情况下回答“最快圈速是什么/策略是什么” 文件。相对路径解析不利于MCP服务器的工作 目录——在克劳德桌面下,这是 cwd 在MCP中设置 config,因此默认情况下文件会放置在用户的项目目录中。
______________________________________________________________________
工具
快速查找(Ergast API-1950至今)
| 工具 | 说明 |
|---|---|
get_schedule | 获取一个赛季的F1比赛日历。 |
get_driver_standings | 获得车手总冠军排名。 |
get_constructor_standings | 获得建筑商锦标赛积分榜。 |
get_driver_info | 获取驾驶员信息。 |
get_race_results_historical | 获取历史比赛结果(2018年之前或比赛数据不可用时)。 |
get_circuit_info | 获取电路信息。 |
会话数据(FastF1实时计时-2018年至今)
| 工具 | 说明 |
|---|---|
get_session_results | 获取会话分类/结果。 |
get_lap_times | 获取车手在一次训练中的所有圈速。 |
get_fastest_laps | 在一场比赛中获得最快圈速,每位车手一圈。 |
get_race_pace | 计算所有车手的平均比赛配速。 |
get_stint_analysis | 分析比赛的轮胎磨损情况。 |
get_pit_stops | 从比赛中获得所有进站。 |
get_qualifying_breakdown | 获得按Q1/Q2/Q3划分的合格结果。 |
遥测(FastF1实时计时-2018年至今)
| 工具 | 说明 |
|---|---|
get_lap_telemetry | 获取特定圈的遥测数据。 |
compare_telemetry | 比较同一会话中两个驱动程序之间的遥测数据。 |
get_speed_trap_data | 获取会话中所有驾驶员的速度陷阱和最高速度数据。 |
get_sector_times | 为每位车手获得最佳分段时间和理论上的最佳圈速。 |
效用
| 工具 | 说明 |
|---|---|
list_events | 列出一个季节的所有事件。 |
list_drivers | 列出一个赛季的所有车手,并可根据特定事件进行筛选。 |
get_cache_status | 检查服务器内存会话缓存状态。 |
clear_cache | 从内存存储中清除缓存会话。 |
______________________________________________________________________
资源
| URI | 描述 |
|---|---|
f1://schedule/{year} | 一个赛季的完整比赛日历 |
f1://drivers/{year} | 一个赛季参加比赛的所有车手 |
f1://constructors/{year} | 一个季节的所有施工人员 |
f1://circuits | 所有F1赛道(历史) |
______________________________________________________________________
提示
| Prompt | Args | 它的作用 |
|---|---|---|
race_recap | year, event | 呼叫结果+最快圈数+进站+暂停,然后讲述比赛 |
qualifying_analysis | year, event | Q细分+扇区时间+前几圈分析 |
driver_comparison | year, driver1, driver2 | 赛季级别正面交锋:排名、比赛、资格赛 |
strategy_analysis | year, event | 刺痛+进站时间+比赛节奏——解释谁赢得了战略战 |
weekend_preview | year, event | 赛道详情+近期历史+锦标赛背景 |
______________________________________________________________________
示例查询(Claude Desktop)
Who won the 2024 Monaco Grand Prix and what was the strategy?
→ use race_recap prompt or call get_session_results + get_stint_analysis
Compare Verstappen and Leclerc's telemetry in 2024 Monaco qualifying
→ compare_telemetry(2024, "Monaco", "Q", "VER", "LEC")
Who had the fastest theoretical lap in 2024 Silverstone qualifying?
→ get_sector_times(2024, "Silverstone", "Q")
Show me the 2024 constructor standings after round 10
→ get_constructor_standings(2024, after_round=10)______________________________________________________________________
发展
# Install dev dependencies
uv sync --dev
# Run tests
uv run pytest
# Run tests with coverage
uv run pytest --cov=fastf1_mcp
# Lint
uv run ruff check src/______________________________________________________________________
数据来源和覆盖范围
| 来源 | 覆盖范围 | 用于 |
|---|---|---|
| 埃加斯特API (通过FastF1) | 1950年至今 | 展位、时间表、历史结果、赛道信息 |
| FastF1实时计时 | 2018年至今 | 圈速、遥测、排位赛、进站、轮胎数据 |
注: FastF1会话数据仅从2018年起可用。使用 get_race_results_historical 对于早期的季节。______________________________________________________________________
许可证
麻省理工学院
