MCP Sport
PYPI · MCP-SPORT · SCANNED SEP 22
MCP server that exposes Formula 1 data from the OpenF1 API.
Available components
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. How we score → Why this is hard to score →
Supply Chain Security44
- Malware scan not yet available for this package.Unverified
- No known CVEs affecting this package version or its production dependencies.Pass
- 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. View diagnostics → Partial
- 1 of 15 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency32
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- License check failed: no license is declared. See how to fix → Fail
- Actively maintained (last published 0 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability78
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- 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. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
- Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage85
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 49% of tool parameters carry a description.Partial
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 20 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 21 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
- Supports UI / widget rendering.Pass
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.
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.
pypi · mcp-sport
claude mcp add andrequeiroz2-mcp-sport -- uvx mcp-sport
{
"mcpServers": {
"andrequeiroz2-mcp-sport": {
"command": "uvx",
"args": [
"mcp-sport"
]
}
}
} {
"servers": {
"andrequeiroz2-mcp-sport": {
"command": "uvx",
"args": [
"mcp-sport"
]
}
}
} codex mcp add andrequeiroz2-mcp-sport -- uvx mcp-sport
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"andrequeiroz2-mcp-sport": {
"type": "local",
"command": [
"uvx",
"mcp-sport"
],
"enabled": true
}
}
} openclaw mcp add andrequeiroz2-mcp-sport --command uvx --arg mcp-sport
mcp_servers:
andrequeiroz2-mcp-sport:
command: "uvx"
args: ["mcp-sport"] {
"McpServers": {
"andrequeiroz2-mcp-sport": {
"Transport": "stdio",
"Command": "uvx",
"Arguments": [
"mcp-sport"
]
}
}
} assistant mcp add andrequeiroz2-mcp-sport -t stdio -c uvx -a mcp-sport
{
"mcpServers": {
"andrequeiroz2-mcp-sport": {
"command": "uvx",
"args": [
"mcp-sport"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 22 Sept 26 50
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 22 Sept 2026 · Analysed pypi/mcp-sport@0.1.0
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | pypi |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | unreviewed | uv_build |
Background: Why install scripts are a supply-chain risk →
Dependencies 15 packages
| Packages resolved | 15 |
|---|---|
| Stale | 1 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
get_car_data Get Car Data ~200
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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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 | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
get_drivers Get Drivers ~234
Fetch F1 drivers from OpenF1, filtered by session, meeting or identity fields.
| Name | Type | Req | Description |
|---|---|---|---|
| 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. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
get_drivers_championship Get Drivers Championship ~104
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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
get_drivers_championship_view Get Drivers Championship View ~111
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.
| Name | Type | Req | Description |
|---|---|---|---|
| session_key | – | – | int | str — required in practice, positive int or 'latest'. Race session identifier; use get_sessions with session_type='Race' to discover it. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
get_intervals Get Intervals ~116
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).
| Name | Type | Req | Description |
|---|---|---|---|
| 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. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
get_laps Get Laps ~242
Fetch detailed lap-by-lap data for an F1 session from OpenF1.
| Name | Type | Req | Description |
|---|---|---|---|
| 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 | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
get_location Get Location ~180
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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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 | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
get_meetings Get Meetings ~161
Fetch F1 meetings (Grand Prix or testing weekends) from OpenF1.
| Name | Type | Req | Description |
|---|---|---|---|
| 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). |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
get_overtakes Get Overtakes ~143
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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
get_pit_stops Get Pit Stops ~143
Fetch pit lane passes for an F1 session from OpenF1.
| Name | Type | Req | Description |
|---|---|---|---|
| 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. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
get_positions Get Positions ~142
Fetch driver position changes throughout an F1 session from OpenF1.
| Name | Type | Req | Description |
|---|---|---|---|
| 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. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
get_race_control Get Race Control ~180
Fetch race control events (flags, safety car, incidents) from OpenF1.
| Name | Type | Req | Description |
|---|---|---|---|
| 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. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
get_race_replay_view Get Race Replay View ~249
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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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… |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
get_session_results Get Session Results ~145
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).
| Name | Type | Req | Description |
|---|---|---|---|
| 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. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
get_sessions Get Sessions ~212
Fetch F1 sessions (practice, qualifying, sprint, race) from OpenF1.
| Name | Type | Req | Description |
|---|---|---|---|
| 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). |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
get_starting_grid Get Starting Grid ~145
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).
| Name | Type | Req | Description |
|---|---|---|---|
| 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. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
get_stints Get Stints ~170
Fetch tyre stints (periods of continuous driving) from OpenF1.
| Name | Type | Req | Description |
|---|---|---|---|
| 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 | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
get_team_radio Get Team Radio ~115
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).
| Name | Type | Req | Description |
|---|---|---|---|
| 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. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
get_teams_championship Get Teams Championship ~106
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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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'. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
get_weather Get Weather ~154
Fetch weather conditions over the track from OpenF1 (sampled every minute).
| Name | Type | Req | Description |
|---|---|---|---|
| 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 | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
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.