# io.github.jinsim/f1verse (pypi · f1verse)

Formula 1 race data with the domain rules applied: stints, tyre wear, publish-safety. Zero deps.

- Trust score: 78/100 (medium)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-21

## Components

- pypi · `f1verse`: 78/100 (this document), [markdown](https://verifymcp.io/servers/jinsim-f1verse/f1verse.md), [page](https://verifymcp.io/servers/jinsim-f1verse/f1verse)

## Channel facts

- Registry: `pypi`
- Package: `f1verse`
- Version: `0.14.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-21.

- **Supply Chain Security**: 100/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs setuptools.build_meta at install time, a recognised native-build step with no shell scripting around it.
  - No production dependencies, so there is no dependency health to assess.
- **Provenance & Transparency**: 35/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 19 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 76/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2668 tokens (~127/item across 21 items; 21 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 70/100
  - Stability observed for 21 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 21 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 22 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the io.github.jinsim/f1verse MCP server?

io.github.jinsim/f1verse runs locally as a PyPI package, launched with uvx f1verse. 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 jinsim-f1verse -- uvx f1verse
```

### Cursor

```json
{
  "mcpServers": {
    "jinsim-f1verse": {
      "command": "uvx",
      "args": [
        "f1verse"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "jinsim-f1verse": {
      "command": "uvx",
      "args": [
        "f1verse"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add jinsim-f1verse -- uvx f1verse
```

### opencode

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

### OpenClaw

```bash
openclaw mcp add jinsim-f1verse --command uvx --arg f1verse
```

### Hermes

```yaml
mcp_servers:
  jinsim-f1verse:
    command: "uvx"
    args: ["f1verse"]
```

### Netclaw

```json
{
  "McpServers": {
    "jinsim-f1verse": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "f1verse"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add jinsim-f1verse -t stdio -c uvx -a f1verse
```

### Other

```json
{
  "mcpServers": {
    "jinsim-f1verse": {
      "command": "uvx",
      "args": [
        "f1verse"
      ]
    }
  }
}
```

## 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-19 (score 78, +1)

No change was recorded against any check on this day. Stability & Change Management went from 60 to 63. That category is still filling its 30-day observation window: 18 days of observed history at the previous scan, 19 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-17 (score 77, +1)

No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-15 (score 76, +1)

No change was recorded against any check on this day. Stability & Change Management went from 47 to 50. That category is still filling its 30-day observation window: 14 days of observed history at the previous scan, 15 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-13 (score 75, +1)

No change was recorded against any check on this day. Stability & Change Management went from 40 to 43. That category is still filling its 30-day observation window: 12 days of observed history at the previous scan, 13 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-11 (score 74, +1)

No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-09 (score 73, +1)

No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-07 (score 72, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-04 (score 71, +1)

No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.

## MCP tools (21)

### `f1_race_story` (~131 tokens)

Everything that happened in one race, as structured JSON.

Everything that happened in one race, as structured JSON. The whole race in one call: final results with broadcast-convention gaps, lead changes, laps led per driver, the event timeline, tyre stints, median race pace (pit/SC/VSC laps excluded), and safety-car interruptions. Use this first for any 'what happened in race X' question — it is one request instead of six.

Input parameters:

- `round` (integer, required): Round number within the season, 1-based.
- `year` (integer, required): Season year, e.g. 2026. Race data 2023+.

### `f1_race_brief` (~107 tokens)

A short factual race summary in plain English.

A short factual race summary in plain English. A publishable prose summary of a race, built from templates only — every number in it comes from the data, so it is safe to quote verbatim. Use when the user wants a readable recap rather than fields to compute with.

Input parameters:

- `round` (integer, required): Round number within the season, 1-based.
- `year` (integer, required): Season year, e.g. 2026. Race data 2023+.

### `f1_session_results` (~149 tokens)

Classification for any session of a weekend.

Classification for any session of a weekend. Results for one session, classified the way that kind of session actually is: races give position and gap (lapped cars as '+1 LAP'), qualifying gives per-segment times with gaps to that segment's fastest and where each driver was eliminated, practice gives a best-lap table.

Input parameters:

- `round` (integer, required): Round number within the season, 1-based.
- `session` (string): Session name as the calendar spells it: Race, Qualifying, Sprint, Sprint Qualifying, Practice 1-3. Defaults to Race.
- `year` (integer, required): Season year, e.g. 2026. Race data 2023+.

### `f1_weekend_sessions` (~99 tokens)

Which sessions a given round has, in order.

Which sessions a given round has, in order. Lists the sessions of a race weekend with start and end times — the valid inputs for the 'session' argument of the other tools. Call this when unsure whether a round was a sprint weekend.

Input parameters:

- `round` (integer, required): Round number within the season, 1-based.
- `year` (integer, required): Season year, e.g. 2026. Race data 2023+.

### `f1_season_status` (~98 tokens)

Where the season stands right now and what is next.

Where the season stands right now and what is next. The latest completed race, sessions that have finished and settled, the next session and how many hours until it starts. Use this to answer 'when is the next race' or to resolve 'the last race' into a concrete round number before calling the other tools.

Input parameters:

- `year` (integer, required): Season year, e.g. 2026. Race data 2023+.

### `f1_standings` (~78 tokens)

Championship standings after the latest completed round.

Championship standings after the latest completed round. Drivers' or constructors' championship table, with points and wins, as of the most recent round that has been scored.

Input parameters:

- `kind` (string): Which championship table to return.
- `year` (integer, required): Season year, e.g. 2026. Race data 2023+.

### `f1_driver_career` (~107 tokens)

A driver's career totals, 1950 to today.

A driver's career totals, 1950 to today. Starts, wins, podiums, poles and points for one driver across all of F1 history, plus the next round-number milestones they are approaching. Takes an Ergast-style driver id such as 'max_verstappen', 'hamilton' or 'leclerc'.

Input parameters:

- `driver_id` (string, required): Ergast/Jolpica driver id, e.g. 'max_verstappen', 'hamilton'.

### `f1_data_quality` (~164 tokens)

Is this session's data complete, current and safe to publish?

Is this session's data complete, current and safe to publish? Completeness per field, how old the fetched copy is, whether the classification is still provisional (stewards rewrite results hours after the flag), corrections observed so far, agreement between independent sources, and a single 'publishable' verdict. Call this before stating a result as final, especially within a few hours of a session ending.

Input parameters:

- `round` (integer, required): Round number within the season, 1-based.
- `session` (string): Session name as the calendar spells it: Race, Qualifying, Sprint, Sprint Qualifying, Practice 1-3. Defaults to Race.
- `year` (integer, required): Season year, e.g. 2026. Race data 2023+.

### `f1_tyre_wear` (~124 tokens)

How fast each set of tyres degraded, stint by stint.

How fast each set of tyres degraded, stint by stint. Per-stint degradation in seconds per lap, computed on fuel-normalised clean laps only (pit, safety-car and traffic laps excluded), plus a circuit abrasion verdict relative to an ordinary surface. Every rate reports how many clean laps it stands on; stints too short to judge say so instead of guessing.

Input parameters:

- `round` (integer, required): Round number within the season, 1-based.
- `year` (integer, required): Season year, e.g. 2026. Race data 2023+.

### `f1_deleted_laps` (~155 tokens)

Lap times the stewards struck out, with reinstatements.

Lap times the stewards struck out, with reinstatements. Every lap-time deletion race control announced in a session, with the car, the time, the stated reason, and whether the deletion still stands — a reinstated lap is reported with the reversal visible rather than silently dropped. Use before treating a fastest lap or a qualifying position as settled.

Input parameters:

- `round` (integer, required): Round number within the season, 1-based.
- `session` (string): Session name as the calendar spells it: Race, Qualifying, Sprint, Sprint Qualifying, Practice 1-3. Defaults to Race.
- `year` (integer, required): Season year, e.g. 2026. Race data 2023+.

### `f1_running_order` (~109 tokens)

Who was where at the end of every lap.

Who was where at the end of every lap. The order on track lap by lap, plus how much each lap churned and who made the biggest single gain. This is the data behind any position-change chart; use it for 'how did the race unfold' rather than fetching results and guessing.

Input parameters:

- `round` (integer, required): Round number within the season, 1-based.
- `year` (integer, required): Season year, e.g. 2026. Race data 2023+.

### `f1_battles` (~113 tokens)

Pairs that ran nose-to-tail, and for how long.

Pairs that ran nose-to-tail, and for how long. Every stretch where two cars held consecutive positions within 1.5 seconds for at least three laps, with the closest the gap got. Finds the fights a results table hides — a scrap for eighth that ran twenty laps never shows up in the standings.

Input parameters:

- `round` (integer, required): Round number within the season, 1-based.
- `year` (integer, required): Season year, e.g. 2026. Race data 2023+.

### `f1_archive_race` (~147 tokens)

A race from 1996-2022, before the live-timing feeds.

A race from 1996-2022, before the live-timing feeds. Results, lap-by-lap running order, lead changes and laps led for the seasons the modern feeds do not cover. Pit stops are included from 2011. The reply carries a 'coverage' block naming exactly what that era does and does not hold, so an absent field is never mistaken for a zero. Use f1_race_story for 2023 onward — it knows strictly more.

Input parameters:

- `round` (integer, required): Round number within the season, 1-based.
- `year` (integer, required): Season year, e.g. 2026. Race data 2023+.

### `f1_closest_titles` (~81 tokens)

Championships ranked by how close they finished.

Championships ranked by how close they finished. The smallest title margins in history, measured both in points and relative to what a win was worth that season — the only way seasons decades apart compare honestly, since two points in 1958 is most of a win and two points today is not.

Input parameters:

- `top` (integer): How many seasons to return.

### `f1_season_shape` (~86 tokens)

How a championship unfolded, round by round.

How a championship unfolded, round by round. Each contender's running points total, who led after every round, and where the lead changed hands. Two seasons can end on the same margin and look nothing alike; this is what tells a procession from a fight.

Input parameters:

- `year` (integer, required): Season year, e.g. 2026. Race data 2023+.

### `f1_highlights` (~99 tokens)

The stretches of a race worth watching.

The stretches of a race worth watching. Windows where the timing feed's own passing signals cluster, ranked by density. An editing index rather than a verdict — it says where cars were changing state, not that a pass completed. 2023 onward.

Input parameters:

- `round` (integer, required): Round number within the season, 1-based.
- `year` (integer, required): Season year, e.g. 2026. Race data 2023+.

### `f1_title_race` (~179 tokens)

Championship win probability, and who is still mathematically alive.

Championship win probability, and who is still mathematically alive. Two answers to 'who wins the title', kept deliberately apart. First the arithmetic: maximum points still available, and who is therefore out for certain — a fact, not a forecast. Then the projection: the rest of the season simulated thousands of times, resampling each driver from the positions they have actually finished in, with retirements at their measured rate. Every run first re-draws the driver's own level, so a short season widens the answer rather than hiding inside it. Returns the assumptions and sample sizes it stands on; the same seed returns the same numbers.

Input parameters:

- `runs` (integer): Simulated seasons. More is steadier and slower.
- `year` (integer, required): Season year, e.g. 2026. Race data 2023+.

### `f1_circuit_profile` (~138 tokens)

A circuit's layout, pit-loss economics and historical record.

A circuit's layout, pit-loss economics and historical record. Geometry, corner-by-corner lap position and local heading change, mini-sector and marshal-sector boundaries, pit loss under green/SC/VSC, a reference lap, and historical outcomes in one evidence-labelled profile. Coordinate length is explicitly not presented as surveyed metres; absent elevation, width and DRS geometry are named rather than guessed. Use this for a race-preview track explainer.

Input parameters:

- `round` (integer, required): Round number within the season, 1-based.
- `year` (integer, required): Season year, e.g. 2026. Race data 2023+.

### `f1_circuit_survey` (~201 tokens)

The circuit measured from the cars that drove it.

The circuit measured from the cars that drove it. What no public circuit map carries, measured from telemetry instead: the height profile with gradients and total climb; where overtakes actually happen, clustered into zones and merged across the timing line; how much of the lap is spent at full throttle and where the braking zones are, with entry and minimum speeds; the width of road the field used and the camber of it. DRS zones are included for seasons that had DRS and reported as a regulation change, not a weather excuse, for those that do not. Every figure names the laps and drivers behind it and declines rather than guesses when the samples cannot support it. Use for track explainers and previews that need real numbers, not an outline.

Input parameters:

- `round` (integer, required): Round number within the season, 1-based.
- `year` (integer, required): Season year, e.g. 2026. Race data 2023+.

### `f1_circuit_directory` (~88 tokens)

Every Formula 1 venue recorded in the historical results.

Every Formula 1 venue recorded in the historical results. A source-labelled directory of circuit ids, names, cities, countries and coordinates from 1950 to today. This is the discovery call for a historic venue; pass its id to f1_circuit_history for results, and use f1_circuit_profile with a year and round when the question needs that event's specific layout.

### `f1_circuit_history` (~119 tokens)

A Formula 1 venue's winners, pole conversion and records.

A Formula 1 venue's winners, pole conversion and records. Historical results at one circuit: every event count, recent winners and their starting positions, pole-to-win conversion, and the most successful drivers. Use f1_circuit_directory first to discover the stable circuit id; this is results history, so it does not assign a modern map to an older layout.

Input parameters:

- `circuit_id` (string, required): Stable circuit id from f1_circuit_directory, e.g. 'monza', 'spa' or 'nurburgring'.

## Diagnostics

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

## Score history

- 2026-09-21: 78
- 2026-09-20: 78
- 2026-09-19: 78
- 2026-09-18: 77
- 2026-09-17: 77
- 2026-09-16: 76
- 2026-09-15: 76
- 2026-09-14: 75
- 2026-09-13: 75
- 2026-09-12: 74
- 2026-09-11: 74
- 2026-09-10: 73
- 2026-09-09: 73
- 2026-09-08: 72
- 2026-09-07: 72
- 2026-09-06: 71
- 2026-09-05: 71
- 2026-09-04: 71
- 2026-09-03: 70
- 2026-09-02: 70
- 2026-09-01: 69
- 2026-08-31: 68

## Common questions

### What is the io.github.jinsim/f1verse MCP server?

io.github.jinsim/f1verse is an MCP server listed in the public MCP registry as io.github.jinsim/f1verse. Formula 1 race data with the domain rules applied: stints, tyre wear, publish-safety. Zero deps. This page covers its PyPI package (f1verse).

### Is the io.github.jinsim/f1verse MCP server safe to use?

io.github.jinsim/f1verse scores 78 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 21 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 io.github.jinsim/f1verse MCP server expose?

io.github.jinsim/f1verse exposes 21 tools: f1_race_story, f1_race_brief, f1_session_results, f1_weekend_sessions, f1_season_status, and 16 more. Their descriptions and schemas cost roughly 2,572 tokens of context every time the server is loaded.

### Is the io.github.jinsim/f1verse MCP server still maintained?

io.github.jinsim/f1verse is still listed as active in the MCP registry. We last reached this channel on 21 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/f1verse/
- Socket report: https://socket.dev/pypi/package/f1verse
- Repository: https://github.com/jinsim/f1verse
- Website: https://jinsim.github.io/f1verse/
- Changelog RSS feed: https://verifymcp.io/servers/jinsim-f1verse/f1verse.xml
- Changelog JSON feed: https://verifymcp.io/servers/jinsim-f1verse/f1verse.json
- HTML version of this page: https://verifymcp.io/servers/jinsim-f1verse/f1verse
