# MCP Sport (pypi · mcp-sport)

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

- Trust score: 50/100 (low)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-22

## Components

- pypi · `mcp-sport`: 50/100 (this document), [markdown](https://verifymcp.io/servers/andrequeiroz2-mcp-sport/mcp-sport.md), [page](https://verifymcp.io/servers/andrequeiroz2-mcp-sport/mcp-sport)

## Channel facts

- Registry: `pypi`
- Package: `mcp-sport`
- Version: `0.1.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-09-22.

- **Supply Chain Security**: 44/100
  - Malware scan not yet available for this package.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs a script at install time (build_backend) that we could not recognise. It may be perfectly ordinary, but we do not read the published tarball, so we cannot say what it does.
  - 1 of 15 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 32/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - License check failed: no license is declared.
  - Actively maintained (last published 0 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 78/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 3284 tokens (~149/item across 22 items; 20 tools + 2 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 85/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 49% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 20 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 21 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).
  - Supports UI / widget rendering.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### How do I install the MCP Sport server?

MCP Sport runs locally as a PyPI package, launched with uvx mcp-sport. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add andrequeiroz2-mcp-sport -- uvx mcp-sport
```

### Cursor

```json
{
  "mcpServers": {
    "andrequeiroz2-mcp-sport": {
      "command": "uvx",
      "args": [
        "mcp-sport"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "andrequeiroz2-mcp-sport": {
      "command": "uvx",
      "args": [
        "mcp-sport"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add andrequeiroz2-mcp-sport -- uvx mcp-sport
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "andrequeiroz2-mcp-sport": {
      "type": "local",
      "command": [
        "uvx",
        "mcp-sport"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add andrequeiroz2-mcp-sport --command uvx --arg mcp-sport
```

### Hermes

```yaml
mcp_servers:
  andrequeiroz2-mcp-sport:
    command: "uvx"
    args: ["mcp-sport"]
```

### Netclaw

```json
{
  "McpServers": {
    "andrequeiroz2-mcp-sport": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "mcp-sport"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add andrequeiroz2-mcp-sport -t stdio -c uvx -a mcp-sport
```

### Other

```json
{
  "mcpServers": {
    "andrequeiroz2-mcp-sport": {
      "command": "uvx",
      "args": [
        "mcp-sport"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-09-22 (score 50)

First indexed and scored.

## MCP tools (20)

### `get_drivers` (~234 tokens)

Get Drivers

Fetch F1 drivers from OpenF1, filtered by session, meeting or identity fields.

Input parameters:

- `country_code`: str — optional, 3 letters, normalized to uppercase. Deprecated by OpenF1 (removed after the 2026 season).
- `driver_number`: int — optional, 1-99. Driver number for the season.
- `first_name`: str — optional, 1-100 chars. Driver first name.
- `full_name`: str — optional, 1-200 chars. Driver full name.
- `last_name`: str — optional, 1-100 chars. Driver last name.
- `meeting_key`: int | str — optional, positive int or 'latest'. Meeting (Grand Prix weekend) identifier.
- `name_acronym`: str — optional, exactly 3 letters (e.g., VER). Normalized to uppercase.
- `session_key`: int | str — optional, positive int or 'latest'. Session identifier; 'latest' targets the current/most recent session.
- `team_name`: str — optional, 1-100 chars. Team name.

Output parameters:

- `result` (array)

### `get_sessions` (~212 tokens)

Get Sessions

Fetch F1 sessions (practice, qualifying, sprint, race) from OpenF1.

Input parameters:

- `circuit_key`: int — optional, positive int. Circuit identifier.
- `country_name`: str — optional, 1-100 chars, e.g., 'Belgium'.
- `location`: str — optional, 1-100 chars, e.g., 'Spa-Francorchamps'.
- `meeting_key`: int | str — optional, positive int or 'latest'. Meeting (Grand Prix weekend) identifier.
- `session_key`: int | str — optional, positive int or 'latest'. Session identifier; 'latest' targets the current/most recent session.
- `session_name`: str — optional, e.g., 'Practice 1', 'Qualifying', 'Race'.
- `session_type`: str — optional, e.g., 'Practice', 'Qualifying', 'Race'.
- `year`: int — optional, >= 2023 (OpenF1 data starts in 2023).

Output parameters:

- `result` (array)

### `get_meetings` (~161 tokens)

Get Meetings

Fetch F1 meetings (Grand Prix or testing weekends) from OpenF1.

Input parameters:

- `circuit_key`: int — optional, positive int. Circuit identifier.
- `country_name`: str — optional, 1-100 chars, e.g., 'Singapore'.
- `location`: str — optional, 1-100 chars, e.g., 'Marina Bay'.
- `meeting_key`: int | str — optional, positive int or 'latest'. Meeting identifier; 'latest' targets the current/most recent meeting.
- `meeting_name`: str — optional, 1-100 chars, e.g., 'Singapore Grand Prix'.
- `year`: int — optional, >= 2023 (OpenF1 data starts in 2023).

Output parameters:

- `result` (array)

### `get_session_results` (~145 tokens)

Get Session Results

Fetch the final classification of an F1 session from OpenF1.

Results become available a few minutes after the official results are
published on the Formula 1 website. If the API returns HTTP 404, the
results are not yet published for that session — retry with an earlier
session_key (use get_sessions to find completed sessions).

Input parameters:

- `driver_number`: int — optional, 1-99. Driver number for the season.
- `position`: int — optional, >= 1. Final position in the session.
- `session_key`: int | str — required in practice, positive int or 'latest'. Session identifier; use get_sessions to discover it.

Output parameters:

- `result` (array)

### `get_starting_grid` (~145 tokens)

Get Starting Grid

Fetch the starting grid for an F1 race from OpenF1.

Grid data becomes available a few minutes after the official results
are published on the Formula 1 website. If the API returns HTTP 404,
the grid is not yet published for that session — retry with an earlier
session_key (use get_sessions to find completed sessions).

Input parameters:

- `driver_number`: int — optional, 1-99. Driver number for the season.
- `position`: int — optional, >= 1. Position on the grid.
- `session_key`: int | str — required in practice, positive int or 'latest'. Session identifier; use get_sessions to discover it.

Output parameters:

- `result` (array)

### `get_positions` (~142 tokens)

Get Positions

Fetch driver position changes throughout an F1 session from OpenF1.

Input parameters:

- `date_from`
- `date_to`
- `driver_number`: int — optional, 1-99. Driver number for the season.
- `meeting_key`: int | str — optional, positive int or 'latest'. Meeting (Grand Prix weekend) identifier.
- `position`: int — optional, >= 1. Exact position (do not combine with position_min/max).
- `position_max`
- `position_min`
- `session_key`: int | str — optional, positive int or 'latest'. Session identifier; use get_sessions to discover it.

Output parameters:

- `result` (array)

### `get_laps` (~242 tokens)

Get Laps

Fetch detailed lap-by-lap data for an F1 session from OpenF1.

Input parameters:

- `date_from`
- `date_to`
- `driver_number`: int — optional, 1-99. Driver number for the season.
- `duration_sector_1_max`
- `duration_sector_1_min`
- `duration_sector_2_max`
- `duration_sector_2_min`
- `duration_sector_3_max`
- `duration_sector_3_min`
- `i1_speed_max`
- `i1_speed_min`
- `i2_speed_max`
- `i2_speed_min`
- `lap_duration_max`
- `lap_duration_min`
- `lap_number`: int — optional, >= 1. Exact lap number (do not combine with lap_number_min/max).
- `lap_number_max`
- `lap_number_min`
- `session_key`: int | str — required in practice, positive int or 'latest'. Session identifier; use get_sessions to discover it.
- `st_speed_max`
- `st_speed_min`

Output parameters:

- `result` (array)

### `get_pit_stops` (~143 tokens)

Get Pit Stops

Fetch pit lane passes for an F1 session from OpenF1.

Input parameters:

- `date_from`
- `date_to`
- `driver_number`: int — optional, 1-99. Driver number for the season.
- `lane_duration_max`
- `lane_duration_min`
- `lap_number`: int — optional, >= 1. Exact lap of the stop (do not combine with lap_number_min/max).
- `lap_number_max`
- `lap_number_min`
- `session_key`: int | str — required in practice, positive int or 'latest'. Session identifier; use get_sessions to discover it.

Output parameters:

- `result` (array)

### `get_stints` (~170 tokens)

Get Stints

Fetch tyre stints (periods of continuous driving) from OpenF1.

Input parameters:

- `compound`: str — optional, 1-20 chars, e.g., 'SOFT', 'MEDIUM', 'HARD'. Normalized to uppercase.
- `driver_number`: int — optional, 1-99. Driver number for the season.
- `lap_end_max`
- `lap_end_min`
- `lap_start_max`
- `lap_start_min`
- `session_key`: int | str — required in practice, positive int or 'latest'. Session identifier; use get_sessions to discover it.
- `stint_number`: int — optional, >= 1. Sequential stint number.
- `tyre_age_at_start_max`
- `tyre_age_at_start_min`

Output parameters:

- `result` (array)

### `get_intervals` (~116 tokens)

Get Intervals

Fetch real-time gaps between drivers and to the race leader from OpenF1.

Available during races only, with updates approximately every 4 seconds.
Use date_from/date_to to bound the response (e.g., the closing laps).

Input parameters:

- `date_from`
- `date_to`
- `driver_number`: int — optional, 1-99. Driver number for the season.
- `session_key`: int | str — required in practice, positive int or 'latest'. Session identifier; use get_sessions to discover it.

Output parameters:

- `result` (array)

### `get_race_control` (~180 tokens)

Get Race Control

Fetch race control events (flags, safety car, incidents) from OpenF1.

Input parameters:

- `category`: str — optional, e.g., 'SessionStatus', 'CarEvent', 'Drs', 'Flag', 'SafetyCar'.
- `date_from`
- `date_to`
- `driver_number`: int — optional, 1-99. Driver number for the season.
- `flag`: str — optional, 1-50 chars, e.g., 'YELLOW', 'BLACK AND WHITE'. Normalized to uppercase.
- `lap_number_max`
- `lap_number_min`
- `scope`: str — optional, e.g., 'Track', 'Driver', 'Sector'.
- `session_key`: int | str — optional, positive int or 'latest'. Session identifier; use get_sessions to discover it.

Output parameters:

- `result` (array)

### `get_weather` (~154 tokens)

Get Weather

Fetch weather conditions over the track from OpenF1 (sampled every minute).

Input parameters:

- `air_temperature_max`
- `air_temperature_min`
- `date_from`
- `date_to`
- `humidity_max`
- `humidity_min`
- `meeting_key`: int | str — optional, positive int or 'latest'. Meeting (Grand Prix weekend) identifier.
- `rainfall_max`
- `rainfall_min`
- `session_key`: int | str — optional, positive int or 'latest'. Session identifier; use get_sessions to discover it.
- `track_temperature_max`
- `track_temperature_min`
- `wind_speed_max`
- `wind_speed_min`

Output parameters:

- `result` (array)

### `get_overtakes` (~143 tokens)

Get Overtakes

Fetch overtakes during F1 races from OpenF1.

Covers on-track passes and position changes from pit stops or
post-race penalties. Only available during races and may be incomplete.

Input parameters:

- `overtaken_driver_number`: int — optional, 1-99. The passed driver.
- `overtaking_driver_number`: int — optional, 1-99. The attacking driver.
- `position`: int — optional, >= 1. Position of the overtaking driver after the overtake.
- `session_key`: int | str — required in practice, positive int or 'latest'. Race session identifier; use get_sessions to discover it.

Output parameters:

- `result` (array)

### `get_team_radio` (~115 tokens)

Get Team Radio

Fetch team radio exchanges between drivers and teams from OpenF1.

Only a limited selection of communications is included, not the complete
record. Coverage has decreased significantly starting in 2026, with most
events providing no radio data at all (a limitation on F1's side).

Input parameters:

- `driver_number`: int — optional, 1-99. Driver number for the season.
- `session_key`: int | str — required in practice, positive int or 'latest'. Session identifier; use get_sessions to discover it.

Output parameters:

- `result` (array)

### `get_car_data` (~200 tokens)

Get Car Data

Fetch car telemetry (speed, rpm, gear, throttle, brake, DRS) from OpenF1.

Sampled at ~3.7 Hz — always narrow down with the range filters below
(e.g., a single lap via date_from/date_to, or high-speed samples via
speed_min) to keep responses usable.

Input parameters:

- `date_from`
- `date_to`
- `driver_number`: int — required, 1-99. Driver number for the season.
- `drs_max`
- `drs_min`
- `n_gear_max`
- `n_gear_min`
- `rpm_max`
- `rpm_min`
- `session_key`: int | str — required, positive int or 'latest'. Session identifier; use get_sessions to discover it.
- `speed_max`
- `speed_min`
- `throttle_max`
- `throttle_min`

Output parameters:

- `result` (array)

### `get_location` (~180 tokens)

Get Location

Fetch approximate car positions on the circuit from OpenF1.

Sampled at ~3.7 Hz — always narrow down with date_from/date_to (e.g.,
a single lap) to keep responses usable. Useful for gauging progress
along the track, but lacks lateral placement (left/right side). The
origin point (0, 0, 0) is arbitrary.

Input parameters:

- `date_from`
- `date_to`
- `driver_number`: int — required, 1-99. Driver number for the season.
- `session_key`: int | str — required, positive int or 'latest'. Session identifier; use get_sessions to discover it.
- `x_max`
- `x_min`
- `y_max`
- `y_min`
- `z_max`
- `z_min`

Output parameters:

- `result` (array)

### `get_drivers_championship` (~104 tokens)

Get Drivers Championship

Fetch drivers championship standings from OpenF1 (beta endpoint).

Only available for race sessions. This endpoint is in beta: its
behavior or fields may change without notice.

Input parameters:

- `driver_number`: int — optional, 1-99. Driver number for the season.
- `session_key`: int | str — required in practice, positive int or 'latest'. Race session identifier; use get_sessions with session_type='Race' to discover it.

Output parameters:

- `result` (array)

### `get_teams_championship` (~106 tokens)

Get Teams Championship

Fetch teams championship standings from OpenF1 (beta endpoint).

Only available for race sessions. This endpoint is in beta: its
behavior or fields may change without notice.

Input parameters:

- `session_key`: int | str — required in practice, positive int or 'latest'. Race session identifier; use get_sessions with session_type='Race' to discover it.
- `team_name`: str — optional, 1-100 chars, e.g., 'McLaren'.

Output parameters:

- `result` (array)

### `get_drivers_championship_view` (~111 tokens)

Get Drivers Championship View

Fetch drivers championship standings and render them as a visual board.

MCP App spike (task 05): in hosts supporting the MCP Apps extension,
the result renders as an interactive HTML board with driver photos,
team colors and points. In other hosts, the same data is returned as
JSON text.

Input parameters:

- `session_key`: int | str — required in practice, positive int or 'latest'. Race session identifier; use get_sessions with session_type='Race' to discover it.

Output parameters:

- `result` (string)

### `get_race_replay_view` (~249 tokens)

Get Race Replay View

Replay a race as an animated position chart (bar-chart-race style).

MCP App (task 06): in hosts supporting the MCP Apps extension, renders
cars stacked by official position with a checkered treadmill paced by
the leader (a new lap opens when the leader crosses), tyre compound
badges (red S / yellow M / white H), per-sector times with broadcast
colors recomputed at the displayed instant (one purple per sector,
green = personal best, yellow = slower), the lap time as MM:SS:mmm,
PIT badges, a centered Safety Car / VSC / race-suspended banner, and
a header with circuit, local start time and track conditions. Retired
cars show a permanent OUT or DNS tag and drop gap, sectors and lap
time. In other hosts the same payload is returned as JSON text.

Input parameters:

- `session_key`: int | str — optional, positive int or 'latest'. Defaults to 'latest' when omitted. RACE session identifier; use get_sessions with session_type='Race' to discover it. During a live race, 'latest' yiel…

Output parameters:

- `result` (string)

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Dependencies. The full working is on the page: https://verifymcp.io/servers/andrequeiroz2-mcp-sport/mcp-sport#diagnostics

## Score history

- 2026-09-22: 50

## Common questions

### What is the MCP Sport server?

MCP Sport is listed in the public MCP registry as io.github.andrequeiroz2/mcp-sport. MCP server that exposes Formula 1 data from the OpenF1 API. This page covers its PyPI package (mcp-sport).

### Is the MCP Sport server safe to use?

MCP Sport scores 50 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 22 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the MCP Sport server expose?

MCP Sport exposes 20 tools: get_drivers, get_sessions, get_meetings, get_session_results, get_starting_grid, and 15 more. Their descriptions and schemas cost roughly 3,252 tokens of context every time the server is loaded.

### Is the MCP Sport server still maintained?

MCP Sport is still listed as active in the MCP registry. We last reached this channel on 22 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- PyPI project: https://pypi.org/project/mcp-sport/
- Socket report: https://socket.dev/pypi/package/mcp-sport
- Repository: https://github.com/andrequeiroz2/mcp-sport
- Changelog RSS feed: https://verifymcp.io/servers/andrequeiroz2-mcp-sport/mcp-sport.xml
- Changelog JSON feed: https://verifymcp.io/servers/andrequeiroz2-mcp-sport/mcp-sport.json
- HTML version of this page: https://verifymcp.io/servers/andrequeiroz2-mcp-sport/mcp-sport
