mcpField
P
pitstop

pitstop

Local
github.com/praneethravuriGames & Entertainment1Updated 5d ago

About pitstop

Pitstop is an MCP server for querying Formula 1 live, historical, and news data. It serves fans and analysts with 11 tools, including telemetry, race analysis, standings, and read-only SQL over its own database.

Key features

  1. 01Live timing and race data
  2. 02Historical results and standings from 1950
  3. 03Lap telemetry and race analysis
  4. 04F1 news from 20 RSS feeds
  5. 05Read-only SQL and Wikidata queries

Use cases

  1. 01Inspect telemetry for selected drivers and laps
  2. 02Compare championship standings across seasons
  3. 03Review race pace and tire degradation
  4. 04Query historical F1 records or current news

MCP support

Exposes 11 F1 data tools to MCP clients over HTTP or stdio, with a hosted HTTP endpoint also available. Tools cover live and historical data, news, and database queries.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"praneethravuri-pitstop": {
"command": "uvx",
"args": [
"pitstop-f1"
],
"env": {
"PITSTOP_TRANSPORT": "<PITSTOP_TRANSPORT>"
}
}
}
}
Run commanduvx pitstop-f1
Environment variables to set
PITSTOP_TRANSPORTTransport mode; must be 'stdio' when run via an MCP client.

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
pypipitstop-f10.5.0

Tools

No tool list yet

Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.

Details

From the project README

Pitstop — F1 MCP Server

An HTTP-first Model Context Protocol (MCP) server for Formula 1 data. Aggregates real-time, historical, and news data from multiple authoritative sources into 11 tools ready for any MCP client.

v0.5.0 | Author: Praneeth Ravuri


Install

Hosted endpoint (nothing to install)

A free public instance runs on Hugging Face Spaces:

https://praneeth1025-pitstop.hf.space/mcp
claude mcp add --transport http pitstop https://praneeth1025-pitstop.hf.space/mcp

Note: the Space sleeps after long inactivity — the first request after a quiet spell takes a cold start.

Local install

stdio, via uvx (no clone needed):

PITSTOP_TRANSPORT=stdio uvx pitstop-f1

Claude Code:

claude mcp add pitstop -e PITSTOP_TRANSPORT=stdio -- uvx pitstop-f1

Codex CLI:

codex mcp add pitstop --env PITSTOP_TRANSPORT=stdio -- uvx pitstop-f1

Gemini CLI:

gemini mcp add pitstop uvx pitstop-f1 --env PITSTOP_TRANSPORT=stdio

VS Code:

code --add-mcp '{"name":"pitstop","command":"uvx","args":["pitstop-f1"],"env":{"PITSTOP_TRANSPORT":"stdio"}}'

Claude Desktop (claude_desktop_config.json), Cursor (~/.cursor/mcp.json), and Windsurf (~/.codeium/windsurf/mcp_config.json) share the same JSON shape:

{
  "mcpServers": {
    "pitstop": {
      "command": "uvx",
      "args": ["pitstop-f1"],
      "env": { "PITSTOP_TRANSPORT": "stdio" }
    }
  }
}

Docker (HTTP transport, runs the full server incl. the F1 database):

docker compose up
# → http://localhost:8000/mcp

Overview

Pitstop exposes F1 data as 11 MCP tools over HTTP (default) or stdio. It pulls from FastF1, Jolpica, OpenF1, Wikidata, RSS feeds, and its own seeded F1 database, handling pagination, retries, caching, and concurrency limits transparently.


Data Sources

SourceCoverageType
FastF12018–presentHistorical / timing / telemetry
Jolpica-F11950–presentHistorical (Ergast-compatible)
OpenF12023–presentReal-time
WikidataAll erasSPARQL queries
RSS Feeds (20 sources)LiveNews
Pitstop F1 Database1950–presentOwned sqlite (seeded from F1DB, self-updated weekly from Jolpica) + per-lap times

Database refresh: .github/workflows/db-update.yml runs weekly to pull new Jolpica results into the owned F1 database.


Tools

ToolDescriptionKey Parameters
get_session_dataRace/qualifying results, lap times, weather, driver details (2018–present)year, gp, session, includes, page, page_size
get_telemetry_dataLap-by-lap car telemetry (speed, throttle, brake, gears) (2018–present)year, gp, session, drivers, lap_numbers, max_points, page, page_size
get_live_dataLive intervals, pit stops, team radio, stints, race control, weather, position, laps, overtakes (2023–present)data_types, year, country, session_name, driver_number, compound, flag, category, page, page_size
get_standingsDriver and constructor championship standings (1950–present)year, round, type, driver_name, team_name, page, page_size
get_scheduleRace calendar and session scheduleyear, include_testing, round, event_name, only_remaining, page, page_size
get_reference_dataCircuits, drivers, constructors encyclopedia (1950–present)reference_type, year, name, page, page_size
get_f1_newsF1 headlines from 20 RSS sourcessource, limit, keywords, driver, team, circuit, year, date_from, date_to, page, page_size
get_resultsRace/qualifying/sprint results, lap times, pit stops (1950–present)year, round, result_type, driver, page
get_race_analysisPace, tire degradation, stint summaries, consistency (2018–present)year, gp, session, drivers, analysis_type, page
query_wikidataSPARQL queries to Wikidata for F1 biography, career records, historysparql, page, page_size
query_f1_databaseRead-only SQL over pitstop's owned F1 database (1950–present): results, standings, driver family trees, team lineagesql, page, page_size

Transport

HTTP (default)
uv sync
uv run pitstop
# → http://localhost:8000

MCP client config:

{
  "mcpServers": {
    "pitstop": {
      "type": "http",
      "url": "http://localhost:8000/mcp"
    }
  }
}
stdio (opt-in)
PITSTOP_TRANSPORT=stdio uv run pitstop

MCP client config:

{
  "mcpServers": {
    "pitstop": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/pitstop", "pitstop"],
      "env": { "PITSTOP_TRANSPORT": "stdio" }
    }
  }
}

Health API

EndpointPurpose
GET /healthPer-source status (FastF1, f1db, Jolpica, OpenF1, RSS)
GET /liveLiveness probe
GET /readyReadiness probe

Example /health response:

{
  "version": "0.5.0",
  "overall": "ok",
  "sources": [
    { "name": "fastf1",  "status": "ok", "latency_ms": 2,   "detail": "cache writable" },
    { "name": "f1db",    "status": "ok", "latency_ms": 1,   "detail": "" },
    { "name": "jolpica", "status": "ok", "latency_ms": 134, "detail": "" },
    { "name": "openf1",  "status": "ok", "latency_ms": 98,  "detail": "" },
    { "name": "rss",     "status": "ok", "latency_ms": 210, "detail": "" }
  ]
}

overall is "ok" / "degraded" / "down". HTTP 200 / 207 / 503.


Wikidata SPARQL

query_wikidata runs SPARQL queries against Wikidata for biographical and historical F1 facts not covered by race APIs.

Only SELECT and ASK queries are accepted (read-only). Always include LIMIT in your query.

Example — find F1 drivers with their birthdate:

SELECT ?driver ?driverLabel ?birthDate WHERE {
  ?driver wdt:P31 wd:Q5 ;
          wdt:P641 wd:Q1968 ;
          wdt:P569 ?birthDate .
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
} ORDER BY DESC(?birthDate) LIMIT 10

Pagination

All list-returning tools accept page (1-based, default 1) and page_size (defaults vary per tool: 10–50). Responses include a pagination block:

{
  "data": [...],
  "pagination": {
    "page": 1,
    "page_size": 20,
    "total_items": 47,
    "total_pages": 3,
    "has_next": true,
    "has_prev": false
  }
}

Configuration

VariableDefaultDescription
PITSTOP_TRANSPORThttphttp or stdio
PITSTOP_HOST0.0.0.0Bind address (HTTP only)
PITSTOP_PORT8000Listen port (HTTP only)
PITSTOP_ENVdevelopmentdevelopment or production
PITSTOP_LOG_LEVELDepends on PITSTOP_ENVDEBUG if development, else INFO
PITSTOP_LOG_FORMATDepends on PITSTOP_ENVtext if development, else json
PITSTOP_ENABLE_CACHINGtrueEnable HTTP response and FastF1 disk caching
PITSTOP_CACHE_TTL_SECONDS300HTTP response cache time-to-live (seconds)
PITSTOP_RATE_LIMIT_ENABLEDfalseEnable concurrent-call limiting
PITSTOP_RATE_LIMIT_PER_HOUR3600Max concurrent calls (derived from per-hour quota)
FASTF1_CACHEcacheFastF1 cache directory path

Caching

Pitstop uses in-memory HTTP response caching (via Hishel) for GET requests with 200 responses. This keeps tool calls inside upstream rate limits:

  • Jolpica: 4 req/s, 500/hr
  • OpenF1: 3 req/s, 30/min
  • Wikidata: Query complexity limits
  • RSS: Per-feed redirects cached

FastF1 maintains its own disk cache in FASTF1_CACHE directory. Control caching via:

  • PITSTOP_ENABLE_CACHING=true (default)
  • PITSTOP_CACHE_TTL_SECONDS=300 (default)

Development

uv sync --dev
uv run pytest
uv run ruff check src/

Contributing

See CONTRIBUTING.md.


Credits & attribution

SourceDescriptionLicense
F1DBDatabase seeded from F1DB and subsequently modified & extended by pitstopCC BY 4.0
FastF1Python library for F1 timing, telemetry, and session dataMIT
Jolpica-F1Ergast-compatible F1 data API, 1950–present; also used to self-update the F1DB-seeded database weekly—
OpenF1Free open-source API for real-time F1 dataMIT
WikidataOpen knowledge graph with SPARQL query serviceCC0
Ergast Motor Racing APIHistorical F1 data 1950–2024 (now served via Jolpica)—
RSS Feeds (20 sources)News headlines, credited collectively; see each feed's link field in get_f1_news resultsRespective publishers

Not affiliated with Formula 1 or the FIA. Data provided by third-party sources under their respective terms.

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.