Race Calendar F1
Server Details
Anonymous read-only Formula 1 tools, resources, prompts, completion, and interactive dashboard.
- Status
- Healthy
- Uptime
- 100.0% over 55 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 15 tools
Most tools target clearly distinct F1 objects, but the cluster of result/classification tools (historical single, historical batch, race classification, session results) has overlapping purposes. Descriptions and parameter differences mostly resolve ambiguity, so misselection should be rare.
All tool names follow a consistent [verb]_f1_[object] snake_case pattern, with get_ as the dominant verb and compare_/search_ as natural exceptions. Pluralization like race_result vs race_results is regular and predictable.
Fifteen tools sits at the upper edge of the ideal range and matches the broad F1 domain well. A few near-duplicate classification/result tools could be consolidated, but the count is not excessive.
The tool set covers the full race information lifecycle: schedule, weekend, circuit, preview, live session, next event, classifications, grid, standings, historical results, updates, and search. No critical dead ends are apparent for the stated calendar/race domain.
Available Tools
15 toolscompare_f1_competitorsCompare F1 CompetitorsARead-onlyIdempotentInspect
Compare two Formula 1 drivers or constructors in one season using sourced standings and explicitly described calculations.
| Name | Required | Description | Default |
|---|---|---|---|
| left | Yes | First driver or constructor name to compare. | |
| year | Yes | Formula 1 season year. | |
| right | Yes | Second driver or constructor name to compare. | |
| competitorType | Yes | Compare two drivers or two constructors. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| left | Yes | |
| year | Yes | |
| right | Yes | |
| leader | Yes | |
| source | Yes | |
| comparison | Yes | |
| generatedAt | Yes | |
| methodology | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, covering the safety profile. The description adds that the comparison is 'using sourced standings and explicitly described calculations,' which gives context about data provenance and calculation transparency, but it does not disclose what specific calculations are performed or how the output is structured. This adds some value beyond annotations but remains high-level.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with the essential purpose front-loaded ('Compare two Formula 1 drivers or constructors...'), followed by a subordinate clause explaining data source and calculation transparency. It is concise with no filler, though it lacks a second sentence to explicitly differentiate usage scenarios, which would have made it stronger.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has a fully described input schema, an output schema, and annotations covering safety (read-only, idempotent), the description adds the missing context that the comparison is based on sourced standings and includes explicitly described calculations. This is sufficient for an agent to understand the tool's purpose and invoke it correctly, though it does not mention edge cases or limitations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter (left, right, year, competitorType) is already well documented. The description does not provide any additional meaning about the parameters beyond what the schema states; it merely restates that two drivers/constructors are compared. Therefore, this dimension is at baseline 3 because the schema already carries the parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Compare') with a clear resource ('two Formula 1 drivers or constructors') and scope ('in one season'). It distinguishes this tool from its siblings, which all handle individual race data, schedules, or standings, not head-to-head comparisons. The additional phrase 'using sourced standings and explicitly described calculations' further clarifies the nature of the operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context (compare two entities within a season) and implies this is the tool for head-to-head comparisons, but it does not explicitly rule out alternatives or mention when not to use it. Given the sibling list, an agent can infer that this is the only comparison tool, but the description lacks an explicit 'use this when...' statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_f1_circuitF1 Circuit DetailsARead-onlyIdempotentInspect
Get circuit metadata and normalized track geometry for a race weekend selected by meeting key, round, race name, or slug.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | Race Calendar race slug, such as round-6-miami-grand-prix or miami-grand-prix. | |
| year | Yes | Formula 1 season year. | |
| round | No | Championship round number for the season. | |
| raceName | No | Human-friendly Grand Prix or race name, matched case-insensitively. | |
| meetingKey | No | OpenF1 meeting key for the race weekend. |
Output Schema
| Name | Required | Description |
|---|---|---|
| year | Yes | |
| round | Yes | |
| circuit | Yes | |
| raceName | Yes | |
| sourceUrl | Yes | |
| meetingKey | Yes | |
| canonicalUrl | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds only functional context ('normalized track geometry') and does not disclose extra behavioral traits such as error handling, data source, or output conventions, though the output schema helps fill that gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every phrase earns its place by conveying the resource, the purpose, and the selection mechanism without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema, full schema description coverage, output schema presence, and safety-related annotations, the description is sufficient for correct tool invocation. It identifies what is returned, how the race weekend is selected, and leaves parameter details to the schema where they already live.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents every parameter including selector alternatives and constraints. The description names the selector types but adds no meaning beyond what the schema provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get circuit metadata and normalized track geometry'. It also specifies the selection scope ('race weekend selected by meeting key, round, race name, or slug'), making it clearly distinct from sibling tools that cover race results, standings, or session data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly situates the tool as the way to obtain circuit metadata/track geometry for a race weekend, and the schema reinforces that exactly one selector must be used. It does not explicitly name alternatives or exclusion conditions, but the context is clear enough for an agent to choose this tool over the listed siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_f1_historical_race_resultHistorical race resultARead-onlyIdempotentInspect
Get one complete historical Formula 1 race classification by season and championship round. Use only for a single race; for two or more races, call get_f1_historical_race_results once instead.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Formula 1 season year. | |
| round | Yes | Championship round number in the historical season. |
Output Schema
| Name | Required | Description |
|---|---|---|
| race | Yes | |
| year | Yes | |
| round | Yes | |
| results | Yes | |
| sourceUrl | Yes | |
| generatedAt | Yes | |
| canonicalUrl | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already carry the read-only, idempotent, and non-destructive safety profile, so the description does not need to repeat those. It adds the 'complete' result quality and historical scope, but no additional non-obvious behavioral details such as error cases, rate limits, or data freshness. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler. The tool's core purpose is front-loaded, and the alternative-tool guidance is placed directly after the main statement, making it efficient for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter historical lookup with a complete input schema, an output schema, and annotations covering safety and idempotency, the description provides everything needed to call the tool correctly. It even handles the main ambiguity by directing multi-race requests to the plural sibling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both year and round already documented. The description's 'season and championship round' phrasing matches the parameters but adds no new syntactic or semantic detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Get'), a precise resource ('one complete historical Formula 1 race classification'), and the two identifying dimensions ('season and championship round'). It also clearly distinguishes itself from the plural sibling by emphasizing 'single race'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool: only for a single race. It also names the exact alternative for two or more races (get_f1_historical_race_results), leaving no ambiguity about routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_f1_historical_race_resultsHistorical race resultsARead-onlyIdempotentInspect
Get 2 to 8 complete historical Formula 1 race classifications in one consolidated request, with per-race sources and bounded partial failures. Use once for multi-race questions instead of repeating get_f1_historical_race_result.
| Name | Required | Description | Default |
|---|---|---|---|
| races | Yes | Two to eight historical races to retrieve in one request. |
Output Schema
| Name | Required | Description |
|---|---|---|
| races | Yes | |
| unavailable | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as readOnly, idempotent, and non-destructive. The description adds valuable behavior beyond annotations: per-race source attribution and bounded partial failures, which tell the agent what to expect when one requested race is unavailable. It does not define 'bounded' precisely, but the disclosure is still meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first front-loads the operation, scope, and reliability behavior, and the second gives the routing rule. Every clause contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only batch tool with a robust input schema, an output schema, and sibling context, the description covers what the tool does, when to choose it, and the contract for partial failures. The only minor gap is not spelling out how bounded partial failures are represented in the output, but the output schema likely covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the single races parameter already documents min/max items and per-item year/round requirements. The description mostly restates the 2-to-8 constraint, so it adds little beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get'), exact resource ('complete historical Formula 1 race classifications'), and the cardinality ('2 to 8') in one consolidated request. It also explicitly distinguishes itself from the singular sibling get_f1_historical_race_result.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use rule ('Use once for multi-race questions') and the alternative to avoid ('instead of repeating get_f1_historical_race_result'). This removes selection ambiguity without requiring the agent to infer from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_f1_live_sessionLive F1 Session StatusARead-onlyIdempotentInspect
Get the latest explicitly timestamped status for the current or selected Formula 1 session. Returns unavailable rather than implying stale data is live.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Season to inspect. Defaults to the current UTC season. | |
| meetingKey | No | Optional OpenF1 meeting key. Omit to discover the current live session. | |
| sessionKey | No | Optional OpenF1 session key. Requires meetingKey when supplied. |
Output Schema
| Name | Required | Description |
|---|---|---|
| year | Yes | |
| state | Yes | |
| isLive | Yes | |
| endDate | Yes | |
| message | Yes | |
| sourceUrl | Yes | |
| startDate | Yes | |
| meetingKey | Yes | |
| observedAt | Yes | |
| sessionKey | Yes | |
| sessionKind | Yes | |
| sessionName | Yes | |
| dataTimestamp | Yes | |
| dataDelaySeconds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive behavior. The description adds valuable context beyond that: results are explicitly timestamped and the tool returns 'unavailable' rather than presenting stale data as live, which is meaningful behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences carry all necessary information with no fluff. The core behavior is front-loaded and the stale-data handling is conveyed efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema, complete parameter descriptions, and annotations covering safety, the description is sufficient for an agent to select and call this tool correctly. No essential behavioral or selection information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all three parameters meaningfully documented. The description adds no parameter-specific detail, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: retrieving the latest explicitly timestamped status for a current or selected F1 session. It distinguishes itself from historical/results siblings by emphasizing live status and stale-data semantics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates this is for current or selected sessions, and the schema adds practical guidance such as omitting meetingKey to discover the live session and requiring meetingKey with sessionKey. It does not explicitly name sibling alternatives or exclusions, but the intended context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_f1_next_eventNext F1 EventARead-onlyIdempotentInspect
Find the next Formula 1 session or race weekend from a UTC timestamp, including an event already in progress.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | UTC timestamp to search from. Defaults to the current time. | |
| year | No | Season to search. Defaults to the season containing the search timestamp, then the following season if needed. | |
| level | No | Return the next individual session or the next race weekend. Defaults to session. | session |
Output Schema
| Name | Required | Description |
|---|---|---|
| year | Yes | |
| event | Yes | |
| level | Yes | |
| sourceUrl | Yes | |
| canonicalUrl | Yes | |
| searchedFrom | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior, so the bar is lower. The description adds the useful boundary trait that an ongoing event counts as the next result and that the lookup is anchored to a UTC instant.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. Every element — resource, instrument, UTC anchor, inclusivity — carries meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema, full parameter documentation, and safety annotations, the definition contains everything needed to invoke the tool. It is missing only explicit guidance about sibling alternatives, reflected in usage_guidelines.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema documentation covers 100% of the parameters, so the baseline is 3. The description's mention of 'session or race weekend' lightly echoes the level enum but adds no semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Find' on a well-defined resource ('next Formula 1 session or race weekend') and anchors it to a UTC timestamp. 'Next' and 'including an event already in progress' separate it from schedule, live, and historical sibling tools without needing the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys a clear temporal use case (future event from a UTC timestamp), so an agent can infer when to call it. However, it never names alternatives or says when not to use this tool, leaving sibling routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_f1_race_classificationF1 Race ClassificationARead-onlyIdempotentInspect
Get a published F1DB race, qualifying, or sprint classification by season and a friendly race selector, without requiring meeting or session keys.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | Race Calendar race slug, such as round-6-miami-grand-prix or miami-grand-prix. | |
| year | Yes | Formula 1 season year. | |
| round | No | Championship round number for the season. | |
| raceName | No | Human-friendly Grand Prix or race name, matched case-insensitively. | |
| meetingKey | No | OpenF1 meeting key for the race weekend. | |
| classification | No | Published F1DB classification to return. Defaults to the Grand Prix race. | race |
Output Schema
| Name | Required | Description |
|---|---|---|
| year | Yes | |
| round | Yes | |
| source | Yes | |
| results | Yes | |
| raceName | Yes | |
| available | Yes | |
| sourceUrl | Yes | |
| meetingKey | Yes | |
| sessionKey | Yes | |
| resultCount | Yes | |
| canonicalUrl | Yes | |
| classification | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds context by calling the classification 'published', implying stable, non-live data, and highlights that it does not require keys. These are useful behavioral additions beyond annotations, though it doesn't describe error handling or edge cases like missing data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with zero redundancy. It conveys the action, scope, and key differentiator efficiently, placing the core action first. No unnecessary words or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has a rich input schema (with property descriptions and oneOf), an output schema (has_output_schema=true), and strong annotations, the description doesn't need to repeat those details. It adds the essential differentiator (no keys needed) and the 'published' aspect. It could arguably mention that one of the selector fields is required, but the schema's oneOf already handles that. Overall, it is sufficient for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter documented (year, round, raceName, slug, meetingKey, classification) and the oneOf constraint explicit. The description adds only the phrase 'friendly race selector', which is a high-level summary of the alternative selectors but doesn't introduce new details. Per the baseline rule, a 3 is appropriate when the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), a precise resource ('published F1DB race, qualifying, or sprint classification'), and the selection criteria ('by season and a friendly race selector'). It also distinguishes itself from alternatives by noting it works 'without requiring meeting or session keys', which differentiates it from sibling tools like get_f1_session_results that likely need those keys. The purpose is unambiguous and scoped.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a clear usage context: use this tool when you want a classification and lack meeting/session keys, offering a friendlier selector. However, it does not explicitly name alternatives or state when NOT to use it (e.g., when you need live session data or have keys and prefer direct lookup). The hint is strong but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_f1_race_previewSpoiler-safe F1 Race PreviewARead-onlyIdempotentInspect
Get a structurally spoiler-safe race-weekend briefing containing schedule and venue context but no classifications, winners, podiums, or result fields.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | Race Calendar race slug, such as round-6-miami-grand-prix or miami-grand-prix. | |
| year | Yes | Formula 1 season year. | |
| round | No | Championship round number for the season. | |
| raceName | No | Human-friendly Grand Prix or race name, matched case-insensitively. | |
| meetingKey | No | OpenF1 meeting key for the race weekend. |
Output Schema
| Name | Required | Description |
|---|---|---|
| year | Yes | |
| sourceUrl | Yes | |
| raceWeekend | Yes | |
| spoilerSafe | Yes | |
| canonicalUrl | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, but the description adds critical behavioral context beyond the annotations: it guarantees the output is structurally free of results, winners, podiums, and classifications. This is a non-obvious behavioral guarantee that prevents the agent from calling this tool when results are requested.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the key differentiator ('structurally spoiler-safe') and then specifies the content (schedule and venue context) and the explicit exclusions. Every word earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, idempotent briefing tool with no nested objects and a rich output schema (though not shown here), the description fully captures the tool's scope and safety guarantees. There is no missing information an agent would need to invoke it correctly—parameter details are in the schema, and the behavioral guarantee is explicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so all five parameters are individually documented with types, formats, and constraints. The description adds no additional parameter semantics, which is acceptable given the schema's thoroughness. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Get') and resource ('race-weekend briefing') with a distinctive attribute ('structurally spoiler-safe'). It clearly differentiates from sibling result-heavy tools like get_f1_race_classification and get_f1_historical_race_result by explicitly excluding classifications, winners, podiums, or result fields.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use this tool: when the user needs schedule and venue context without spoilers. It doesn't explicitly name alternative tools or state when not to use it, but the exclusion of results makes the usage context clear. Sibling names and the absence of results are enough for a competent agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_f1_race_weekendF1 Race WeekendARead-onlyIdempotentInspect
Get one public Formula 1 race weekend by season and exactly one friendly selector: meeting key, round, race name, or slug.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | Race Calendar race slug, such as round-6-miami-grand-prix or miami-grand-prix. | |
| year | Yes | Formula 1 season year. | |
| round | No | Championship round number for the season. | |
| raceName | No | Human-friendly Grand Prix or race name, matched case-insensitively. | |
| meetingKey | No | OpenF1 meeting key for the race weekend. |
Output Schema
| Name | Required | Description |
|---|---|---|
| year | Yes | |
| sourceUrl | Yes | |
| raceWeekend | Yes | |
| canonicalUrl | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation as read-only, idempotent, and non-destructive, so the description's 'public' qualifier and 'exactly one' constraint add modest context beyond the annotations. It doesn't disclose return behavior, errors, or rate limits, but the annotation coverage lowers the burden; this is acceptable but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, leads with the verb and resource, and packs the key selector constraint into the first sentence. No filler or redundant phrasing; every word adds information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description communicates the core selection logic (one season + exactly one selector) and the fact that the resource is public and singular. Given the rich input schema, a oneOf constraint, and an output schema, the description is sufficient for an agent to invoke the tool correctly; no critical missing information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, meaning all five parameters are already described with types, constraints, and examples. The description's listing of 'meeting key, round, race name, or slug' merely names the four selector properties without adding new semantic detail. This matches the baseline 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), a distinct resource ('one public Formula 1 race weekend'), and a clear selection constraint ('by season and exactly one friendly selector'). This distinguishes it from sibling tools like get_f1_season_schedule (which lists many weekends) or get_f1_race_classification (a different resource), even though no sibling is named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: to retrieve a single race weekend by season and one of four selectors. However, it doesn't explicitly state when to prefer an alternative, nor does it mention exclusions or fallback tools. This is 'clear context, no exclusions'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_f1_season_scheduleF1 Season ScheduleARead-onlyIdempotentInspect
Get the verified public Formula 1 schedule for a season, including UTC session times, freshness, results, and canonical links.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Formula 1 season year. |
Output Schema
| Name | Required | Description |
|---|---|---|
| year | Yes | |
| races | Yes | |
| source | Yes | |
| raceCount | Yes | |
| sourceUrl | Yes | |
| staleAfter | Yes | |
| generatedAt | Yes | |
| canonicalUrl | Yes | |
| lastVerifiedAt | Yes | |
| refreshIntervalSeconds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, and idempotent behavior. The description adds value by mentioning 'verified public', UTC times, freshness, and canonical links, which are useful behavioral details not covered by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the core purpose and lists key content. It is efficient and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple single-parameter input, the annotations, and the presence of an output schema, the description provides sufficient context. It could be slightly more explicit about return format, but the output schema covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description ('Formula 1 season year') and range. The description does not add extra parameter details, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the verified public F1 schedule for a season, including session times, freshness, results, and links. It distinguishes from siblings like race-specific or live tools, though it doesn't explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is for season-wide schedule information, which is distinct from race-specific or live tools. It doesn't explicitly state when not to use it, but the context is sufficient for an agent to infer the appropriate use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_f1_session_resultsF1 Session ResultsARead-onlyIdempotentInspect
Get the published F1DB classification for one Formula 1 session by season, meeting key, and session key, with positions and available result details.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Formula 1 season year. | |
| meetingKey | Yes | OpenF1 meeting key for the race weekend. | |
| sessionKey | Yes | OpenF1 session key. |
Output Schema
| Name | Required | Description |
|---|---|---|
| year | Yes | |
| source | Yes | |
| results | Yes | |
| sourceUrl | Yes | |
| meetingKey | Yes | |
| sessionKey | Yes | |
| resultCount | Yes | |
| canonicalUrl | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and the description's 'Get' is consistent. It adds the 'published F1DB classification' qualifier, implying stable/published data rather than live results. No contradictions or additional behavioral details (rate limits, auth, pagination) are provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with the action and resource, and every phrase earns its place. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-key lookup with full schema coverage, an output schema, and safe read-only/idempotent annotations, the description provides everything needed to invoke it. Missing context like how to discover the keys is external, not a gap in the definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% – year, meetingKey, and sessionKey each have descriptive text. The description repeats the three keys but adds no syntax, format, or relationship detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('published F1DB classification for one Formula 1 session'), and identifies the selection keys (season, meeting key, session key). It does not explicitly contrast with sibling tools like get_f1_race_classification or get_f1_starting_grid, but the session-specific scope is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to prefer this tool over siblings; no exclusions or alternatives are mentioned. The key-based lookup is an implicit trigger, but the description does not state when this should be used versus get_f1_race_classification or get_f1_live_session.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_f1_standingsF1 StandingsARead-onlyIdempotentInspect
Get the public Formula 1 driver and constructor standings for a season with canonical source links.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Formula 1 season year. |
Output Schema
| Name | Required | Description |
|---|---|---|
| year | Yes | |
| drivers | Yes | |
| sourceUrl | Yes | |
| sessionKey | Yes | |
| canonicalUrl | Yes | |
| constructors | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows this is a safe read operation. The description adds the specificity that the data is 'public' and includes 'canonical source links', giving context about the data provenance and output expectation beyond what annotations provide. However, it does not describe pagination or any rate limits, but those are not critical for a simple standings lookup.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, densely informative sentence that front-loads the action and scope. Every word earns its place—no filler or redundancy. It is optimally brief while conveying the essential details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple parameterized tool with an output schema (as indicated by CONTEXT), the description provides the key aspects: what data is returned (driver and constructor standings) and the scope (per season with links). The existence of an output schema means the agent can rely on it for return value details. The only minor gap is the lack of explicit usage timing, but the overall specificity is sufficient for a competent agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers the single parameter 'year' with a description and limits (1950-2100). The description does not add additional meaning beyond the schema, such as the significance of year ranges or specific season formats (e.g., calendar year vs. championship year). Since schema coverage is 100%, the baseline of 3 is appropriate—no extra behavior is added but nothing is lacking either.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Get'), resource ('driver and constructor standings'), and scope ('for a season' plus 'public...with canonical source links'). It is distinct from sibling tools, which target races, circuits, and historical race results, leaving no ambiguity about which tool to use for standings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives, though its purpose is clear enough that an agent can infer the use case. It lacks guidance on prerequisites (if any) or situations where a sibling tool (e.g., get_f1_historical_race_results) might be preferable, leaving room for misinterpretation in ambiguous contexts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_f1_starting_gridF1 Starting GridARead-onlyIdempotentInspect
Get the published F1DB starting grid for one Formula 1 session by season, meeting key, and session key; use session results for the final classification.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Formula 1 season year. | |
| meetingKey | Yes | OpenF1 meeting key for the race weekend. | |
| sessionKey | Yes | OpenF1 session key. |
Output Schema
| Name | Required | Description |
|---|---|---|
| year | Yes | |
| source | Yes | |
| sourceUrl | Yes | |
| entryCount | Yes | |
| meetingKey | Yes | |
| sessionKey | Yes | |
| canonicalUrl | Yes | |
| startingGrid | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is established. The description adds useful context that the data is the 'published' starting grid rather than live or provisional, but it does not disclose behaviors such as missing grids for unpublished sessions or error cases. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire description is one tightly packed sentence that front-loads the main action and resource, then adds a useful scoping caveat. There is no filler or redundant restatement of structured fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only lookup tool with three fully documented parameters, a safety profile in annotations, and an output schema, the description covers the essential invocation context. It says what is returned (starting grid), how to select the session, and where to go for the final classification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all three parameters (year, meetingKey, sessionKey) individually documented. The description restates these keys in prose but adds no additional semantics beyond what the schema already provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get the published F1DB starting grid for one Formula 1 session.' It clearly distinguishes this tool from sibling result/classification tools by emphasizing 'starting grid' and by noting that final classification belongs to session results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit usage directive: 'use session results for the final classification.' This tells the agent when to prefer a different tool, although it does not enumerate broader conditions or alternative tools beyond that one case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_f1_updatesRecent F1 ChangesARead-onlyIdempotentInspect
Get recent public schedule, standings, and result changes after an optional timestamp or cursor.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum changes to return. Defaults to 20 and never exceeds 50. | |
| since | No | Only return changes after this UTC timestamp. | |
| cursor | No | Opaque continuation cursor returned by an earlier updates request. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| since | Yes | |
| nextCursor | Yes | |
| generatedAt | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds value by noting the data is public and that results are change-oriented with timestamp/cursor-based incremental behavior. It does not mention rate limits or auth, but the public/read-only framing reduces the need.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with the main purpose front-loaded and the optional filter mechanism at the end. It contains no filler or redundant restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full output schema, complete parameter descriptions, and protective annotations, the description provides enough context for correct invocation. The only minor gap is not explaining whether since and cursor may be combined, but the schema's cursor description implies it is a continuation from an earlier request.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: limit, since, and cursor all have individual descriptions. The description only restates that the timestamp/cursor are optional, adding no semantic meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb, 'Get', and names the resource: 'recent public schedule, standings, and result changes' plus the optional timestamp/cursor scope. This clearly differentiates it from sibling snapshot tools like get_f1_standings and get_f1_season_schedule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrasing 'recent ... changes after an optional timestamp or cursor' clearly implies this is the delta/incremental-update tool, as opposed to full-state sibling tools. It does not explicitly name alternatives or give when-not-to-use conditions, but the context is strong enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_f1_historySearch F1 HistoryARead-onlyIdempotentInspect
Search the Formula 1 history index for drivers, teams, circuits, and races with bounded, cursor-based results.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results to return. Defaults to 10 and never exceeds 20. | |
| query | Yes | Driver, team, circuit, or race text to find. | |
| types | No | Optional unique entity types to include in the search. | |
| cursor | No | Opaque continuation cursor returned by an earlier history search. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| query | Yes | |
| types | Yes | |
| nextCursor | Yes | |
| generatedAt | Yes | |
| sourceUpdatedAt | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that the tool is read-only, idempotent, and non-destructive. The description adds useful behavioral context beyond annotations by mentioning 'bounded, cursor-based results,' which signals pagination and result limits. It does not detail edge cases such as empty results or cursor expiration, but the core behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence conveys the action, resource, scope, and a key behavioral trait (bounded cursor-based results). There is no filler, repetition, or extraneous detail; every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter search tool with full schema descriptions, a rich output schema, and annotations covering safety, the description covers the essential scoping and pagination behavior. The only notable omission is explicit guidance on choosing this tool over specific getter siblings, which is more of a usage-guideline gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and every parameter already has a clear description, including default/max for limit, allowed values for types, and the opaque cursor semantics. The description's mention of 'drivers, teams, circuits, and races' mirrors the types enum rather than adding new meaning, so the value-added is minimal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('Search'), a specific resource ('the Formula 1 history index'), and a clear scope ('drivers, teams, circuits, and races'). The phrase 'bounded, cursor-based results' also distinguishes it from sibling tools that retrieve specific entities rather than performing a search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when searching broadly across the history index. However, it does not explicitly state when not to use it or name alternatives like get_f1_circuit or get_f1_historical_race_result for direct lookups. The usage context is inferable but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
15 tool updates
- Changed
compare_f1_competitors4 fields changed- removed
Output schema / properties / left / properties / nationality / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / left / properties / nationality / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / right / properties / nationality / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / right / properties / nationality / typeAdded value: +[ + "string", + "null" +]
- Changed
get_f1_circuit6 fields changed- removed
Output schema / properties / circuit / properties / countryCode / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / circuit / properties / countryCode / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / circuit / properties / imageUrl / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / circuit / properties / imageUrl / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / circuit / properties / type / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / circuit / properties / type / typeAdded value: +[ + "string", + "null" +]
- Changed
get_f1_historical_race_result15 fields changed- removed
Output schema / properties / race / properties / circuit / properties / latitude / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / race / properties / circuit / properties / latitude / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / race / properties / circuit / properties / longitude / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / race / properties / circuit / properties / longitude / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / race / properties / time / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / race / properties / time / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / carNumber / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / carNumber / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / driver / properties / code / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / driver / properties / code / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / driver / properties / permanentNumber / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / driver / properties / permanentNumber / typeAdded value: +[ + "string", + "null" +] - changed
Output schema / properties / results / items / properties / fastestLap / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "averageSpeedKph": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "lap": { - "anyOf": [ - { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "rank": { - "anyOf": [ - { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "time": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "lap", - "rank", - "time", - "averageSpeedKph" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "averageSpeedKph": { + "type": [ + "number", + "null" + ] + }, + "lap": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "rank": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "time": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "lap", + "rank", + "time", + "averageSpeedKph" + ], + "type": "object" + }, + { + "type": "null" + } +] - removed
Output schema / properties / results / items / properties / time / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / time / typeAdded value: +[ + "string", + "null" +]
- Changed
get_f1_historical_race_results15 fields changed- removed
Output schema / properties / races / items / properties / race / properties / circuit / properties / latitude / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / races / items / properties / race / properties / circuit / properties / latitude / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / races / items / properties / race / properties / circuit / properties / longitude / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / races / items / properties / race / properties / circuit / properties / longitude / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / races / items / properties / race / properties / time / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / races / items / properties / race / properties / time / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / races / items / properties / results / items / properties / carNumber / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / races / items / properties / results / items / properties / carNumber / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / races / items / properties / results / items / properties / driver / properties / code / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / races / items / properties / results / items / properties / driver / properties / code / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / races / items / properties / results / items / properties / driver / properties / permanentNumber / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / races / items / properties / results / items / properties / driver / properties / permanentNumber / typeAdded value: +[ + "string", + "null" +] - changed
Output schema / properties / races / items / properties / results / items / properties / fastestLap / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "averageSpeedKph": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "lap": { - "anyOf": [ - { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "rank": { - "anyOf": [ - { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "time": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "lap", - "rank", - "time", - "averageSpeedKph" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "averageSpeedKph": { + "type": [ + "number", + "null" + ] + }, + "lap": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "rank": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "time": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "lap", + "rank", + "time", + "averageSpeedKph" + ], + "type": "object" + }, + { + "type": "null" + } +] - removed
Output schema / properties / races / items / properties / results / items / properties / time / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / races / items / properties / results / items / properties / time / typeAdded value: +[ + "string", + "null" +]
- Changed
get_f1_live_session10 fields changed- removed
Output schema / properties / dataTimestamp / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / dataTimestamp / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / endDate / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / endDate / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / message / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / message / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / sessionName / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / sessionName / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / startDate / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / startDate / typeAdded value: +[ + "string", + "null" +]
- Changed
get_f1_next_event1 field changed- changed
Input schema / properties / from / patternPrevious value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
- Changed
get_f1_race_classification14 fields changed- removed
Output schema / properties / results / items / properties / constructorName / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / constructorName / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / driverName / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / driverName / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / duration / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / duration / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / gapToLeader / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / gapToLeader / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / headshotUrl / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / headshotUrl / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / points / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / points / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / results / items / properties / positionLabel / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / positionLabel / typeAdded value: +[ + "string", + "null" +]
- Changed
get_f1_race_preview6 fields changed- removed
Output schema / properties / raceWeekend / properties / countryCode / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / raceWeekend / properties / countryCode / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / raceWeekend / properties / officialName / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / raceWeekend / properties / officialName / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / raceWeekend / properties / statusNote / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / raceWeekend / properties / statusNote / typeAdded value: +[ + "string", + "null" +]
- Changed
get_f1_race_weekend14 fields changed- removed
Output schema / properties / raceWeekend / properties / countryCode / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / raceWeekend / properties / countryCode / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / raceWeekend / properties / officialName / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / raceWeekend / properties / officialName / typeAdded value: +[ + "string", + "null" +] - changed
Output schema / properties / raceWeekend / properties / recap / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "detail": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "summary": { - "type": "string" - } - }, - "required": [ - "summary", - "detail" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "detail": { + "type": [ + "string", + "null" + ] + }, + "summary": { + "type": "string" + } + }, + "required": [ + "summary", + "detail" + ], + "type": "object" + }, + { + "type": "null" + } +] - removed
Output schema / properties / raceWeekend / properties / resultHighlights / items / properties / constructorName / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / raceWeekend / properties / resultHighlights / items / properties / constructorName / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / raceWeekend / properties / resultHighlights / items / properties / driverName / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / raceWeekend / properties / resultHighlights / items / properties / driverName / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / raceWeekend / properties / resultSummary / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / raceWeekend / properties / resultSummary / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / raceWeekend / properties / statusNote / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / raceWeekend / properties / statusNote / typeAdded value: +[ + "string", + "null" +] - changed
Output schema / properties / raceWeekend / properties / winner / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "constructorName": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "driverName": { - "type": "string" - } - }, - "required": [ - "driverName", - "constructorName" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "constructorName": { + "type": [ + "string", + "null" + ] + }, + "driverName": { + "type": "string" + } + }, + "required": [ + "driverName", + "constructorName" + ], + "type": "object" + }, + { + "type": "null" + } +]
- Changed
get_f1_season_schedule7 fields changed- removed
Output schema / properties / races / items / properties / countryCode / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / races / items / properties / countryCode / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / races / items / properties / resultSummary / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / races / items / properties / resultSummary / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / races / items / properties / statusNote / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / races / items / properties / statusNote / typeAdded value: +[ + "string", + "null" +] - changed
Output schema / properties / races / items / properties / winner / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "constructorName": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "driverName": { - "type": "string" - } - }, - "required": [ - "driverName", - "constructorName" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "constructorName": { + "type": [ + "string", + "null" + ] + }, + "driverName": { + "type": "string" + } + }, + "required": [ + "driverName", + "constructorName" + ], + "type": "object" + }, + { + "type": "null" + } +]
- Changed
get_f1_session_results14 fields changed- removed
Output schema / properties / results / items / properties / constructorName / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / constructorName / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / driverName / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / driverName / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / duration / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / duration / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / gapToLeader / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / gapToLeader / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / headshotUrl / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / headshotUrl / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / points / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / points / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / results / items / properties / positionLabel / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / positionLabel / typeAdded value: +[ + "string", + "null" +]
- Changed
get_f1_standings8 fields changed- removed
Output schema / properties / constructors / items / properties / colour / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / constructors / items / properties / colour / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / constructors / items / properties / logoUrl / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / constructors / items / properties / logoUrl / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / drivers / items / properties / driverName / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / drivers / items / properties / driverName / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / drivers / items / properties / headshotUrl / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / drivers / items / properties / headshotUrl / typeAdded value: +[ + "string", + "null" +]
- Changed
get_f1_starting_grid8 fields changed- removed
Output schema / properties / startingGrid / items / properties / constructorName / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / startingGrid / items / properties / constructorName / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / startingGrid / items / properties / driverName / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / startingGrid / items / properties / driverName / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / startingGrid / items / properties / headshotUrl / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / startingGrid / items / properties / headshotUrl / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / startingGrid / items / properties / lapDuration / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / startingGrid / items / properties / lapDuration / typeAdded value: +[ + "number", + "null" +]
- Changed
get_f1_updates5 fields changed- changed
Input schema / properties / since / patternPrevious value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" - removed
Output schema / properties / nextCursor / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / nextCursor / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / since / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / since / typeAdded value: +[ + "string", + "null" +]
- Changed
search_f1_history4 fields changed- removed
Output schema / properties / nextCursor / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / nextCursor / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / sourceUpdatedAt / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / sourceUpdatedAt / typeAdded value: +[ + "string", + "null" +]
2 tool updates
- Changed
get_f1_historical_race_result1 field changed- changed
Output schema / properties / results / items / propertiesPrevious value: -"[Object: undefined]"New value: +{ + "carNumber": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "constructor": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "nationality": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "nationality" + ], + "type": "object" + }, + "driver": { + "additionalProperties": false, + "properties": { + "code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "nationality": { + "type": "string" + }, + "permanentNumber": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "id", + "name", + "code", + "nationality", + "permanentNumber" + ], + "type": "object" + }, + "fastestLap": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "averageSpeedKph": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "lap": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "rank": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "lap", + "rank", + "time", + "averageSpeedKph" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "grid": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "laps": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "points": { + "type": "number" + }, + "position": { + "anyOf": [ + { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "positionText": { + "type": "string" + }, + "status": { + "type": "string" + }, + "time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } +}
- Changed
get_f1_historical_race_results1 field changed- changed
Output schema / properties / races / items / properties / results / items / propertiesPrevious value: -"[Object: undefined]"New value: +{ + "carNumber": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "constructor": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "nationality": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "nationality" + ], + "type": "object" + }, + "driver": { + "additionalProperties": false, + "properties": { + "code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "nationality": { + "type": "string" + }, + "permanentNumber": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "id", + "name", + "code", + "nationality", + "permanentNumber" + ], + "type": "object" + }, + "fastestLap": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "averageSpeedKph": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "lap": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "rank": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "lap", + "rank", + "time", + "averageSpeedKph" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "grid": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "laps": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "points": { + "type": "number" + }, + "position": { + "anyOf": [ + { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "positionText": { + "type": "string" + }, + "status": { + "type": "string" + }, + "time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } +}
5 tool updates
- Removed
get_f1_driver_session_summary - Added
get_f1_race_classification - Removed
get_f1_session_analysis - Changed
get_f1_session_results4 fields changed- added
Output schema / properties / results / items / properties / positionLabelAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - changed
Output schema / properties / results / items / requiredPrevious value: -[ - "driverNumber", - "driverName", - "headshotUrl", - "constructorName", - "position", - "numberOfLaps", - "points", - "duration", - "gapToLeader", - "status" -]New value: +[ + "driverNumber", + "driverName", + "headshotUrl", + "constructorName", + "position", + "positionLabel", + "numberOfLaps", + "points", + "duration", + "gapToLeader", + "status" +] - added
Output schema / properties / sourceAdded value: +{ + "const": "F1DB", + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "year", - "meetingKey", - "sessionKey", - "canonicalUrl", - "sourceUrl", - "resultCount", - "results" -]New value: +[ + "year", + "meetingKey", + "sessionKey", + "canonicalUrl", + "sourceUrl", + "source", + "resultCount", + "results" +]
- Changed
get_f1_starting_grid2 fields changed- added
Output schema / properties / sourceAdded value: +{ + "const": "F1DB", + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "year", - "meetingKey", - "sessionKey", - "canonicalUrl", - "sourceUrl", - "entryCount", - "startingGrid" -]New value: +[ + "year", + "meetingKey", + "sessionKey", + "canonicalUrl", + "sourceUrl", + "source", + "entryCount", + "startingGrid" +]
2 tool updates
- Added
get_f1_historical_race_results - Changed
get_f1_live_session1 field changed- removed
Input schema / dependentRequiredRemoved value: -{ - "sessionKey": [ - "meetingKey" - ] -}
15 tool updates
- Changed
compare_f1_competitors6 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / descriptionAdded value: +"Compare two drivers or two constructors within one Formula 1 season." - added
Input schema / properties / left / descriptionAdded value: +"First driver or constructor name to compare." - added
Input schema / properties / right / descriptionAdded value: +"Second driver or constructor name to compare." - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / descriptionAdded value: +"Sourced same-season Formula 1 driver or constructor comparison with explicit methodology."
- Changed
get_f1_circuit4 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / descriptionAdded value: +"Select one race weekend by season and exactly one of meetingKey, round, raceName, or slug." - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / descriptionAdded value: +"Formula 1 circuit identity, venue metadata, normalized geometry, and canonical links."
- Changed
get_f1_driver_session_summary4 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / descriptionAdded value: +"Select one driver's summary within a Formula 1 session." - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / descriptionAdded value: +"One Formula 1 driver's lap, sector, speed, grid, position, and interval session summary."
- Changed
get_f1_historical_race_result4 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / descriptionAdded value: +"Select a historical Formula 1 race by season and championship round." - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / descriptionAdded value: +"Complete historical Formula 1 race classification with driver, constructor, fastest-lap, and source details."
- Changed
get_f1_live_session4 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / descriptionAdded value: +"Inspect the current Formula 1 session or select one by season, meeting key, and session key." - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / descriptionAdded value: +"Explicitly timestamped Formula 1 session state with data freshness and availability context."
- Changed
get_f1_next_event4 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / descriptionAdded value: +"Select the next Formula 1 session or race weekend from a UTC point in time." - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / descriptionAdded value: +"Next live or upcoming Formula 1 session or race weekend from the requested UTC instant."
- Changed
get_f1_race_preview4 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / descriptionAdded value: +"Select one race weekend by season and exactly one of meetingKey, round, raceName, or slug." - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / descriptionAdded value: +"Structurally spoiler-safe Formula 1 race-weekend schedule and venue preview with no result fields."
- Changed
get_f1_race_weekend4 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / descriptionAdded value: +"Select one race weekend by season and exactly one of meetingKey, round, raceName, or slug." - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / descriptionAdded value: +"Resolved Formula 1 race-weekend context with sessions, available classifications, recap, and source links."
- Changed
get_f1_season_schedule4 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / descriptionAdded value: +"Select one Formula 1 season." - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / descriptionAdded value: +"Verified Formula 1 season schedule with freshness metadata, canonical links, and race weekends."
- Changed
get_f1_session_analysis4 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / descriptionAdded value: +"Select one typed analysis view for a Formula 1 session." - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / descriptionAdded value: +"Strictly typed Formula 1 session analysis with freshness, data availability, and source links."
- Changed
get_f1_session_results4 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / descriptionAdded value: +"Select one Formula 1 session by season, meeting key, and session key." - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / descriptionAdded value: +"Published Formula 1 session classification with source and canonical links."
- Changed
get_f1_standings4 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / descriptionAdded value: +"Select one Formula 1 season." - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / descriptionAdded value: +"Formula 1 driver and constructor standings with the source session and canonical links."
- Changed
get_f1_starting_grid4 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / descriptionAdded value: +"Select one Formula 1 session by season, meeting key, and session key." - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / descriptionAdded value: +"Published Formula 1 session starting grid with source and canonical links."
- Changed
get_f1_updates6 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / descriptionAdded value: +"Read a bounded page of recent public Formula 1 changes." - added
Input schema / properties / cursor / descriptionAdded value: +"Opaque continuation cursor returned by an earlier updates request." - added
Input schema / properties / limit / descriptionAdded value: +"Maximum changes to return. Defaults to 20 and never exceeds 50." - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / descriptionAdded value: +"Bounded cursor page of recent public Formula 1 schedule, standings, and result changes."
- Changed
search_f1_history7 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / descriptionAdded value: +"Search the bounded Formula 1 history index." - added
Input schema / properties / cursor / descriptionAdded value: +"Opaque continuation cursor returned by an earlier history search." - added
Input schema / properties / limit / descriptionAdded value: +"Maximum results to return. Defaults to 10 and never exceeds 20." - added
Input schema / properties / types / descriptionAdded value: +"Optional unique entity types to include in the search." - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / descriptionAdded value: +"Bounded cursor page of matching Formula 1 drivers, teams, circuits, and races."
13 tool updates
- Added
compare_f1_competitors - Added
get_f1_circuit - Added
get_f1_driver_session_summary - Added
get_f1_historical_race_result - Added
get_f1_live_session - Added
get_f1_next_event - Added
get_f1_race_preview - Changed
get_f1_race_weekend5 fields changed- added
Input schema / oneOfAdded value: +[ + { + "required": [ + "meetingKey" + ] + }, + { + "required": [ + "round" + ] + }, + { + "required": [ + "raceName" + ] + }, + { + "required": [ + "slug" + ] + } +] - added
Input schema / properties / raceNameAdded value: +{ + "description": "Human-friendly Grand Prix or race name, matched case-insensitively.", + "maxLength": 120, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / roundAdded value: +{ + "description": "Championship round number for the season.", + "maximum": 99, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / slugAdded value: +{ + "description": "Race Calendar race slug, such as round-6-miami-grand-prix or miami-grand-prix.", + "maxLength": 160, + "minLength": 1, + "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "year", - "meetingKey" -]New value: +[ + "year" +]
- Added
get_f1_session_analysis - Added
get_f1_session_results - Added
get_f1_starting_grid - Added
get_f1_updates - Added
search_f1_history
3 tool updates
- Changed
get_f1_race_weekend6 fields changed- added
Input schema / properties / meetingKey / descriptionAdded value: +"OpenF1 meeting key for the race weekend." - added
Input schema / properties / meetingKey / exclusiveMinimumAdded value: +0 - added
Input schema / properties / meetingKey / maximumAdded value: +9007199254740991 - removed
Input schema / properties / meetingKey / minimumRemoved value: -1 - added
Input schema / properties / year / descriptionAdded value: +"Formula 1 season year." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "canonicalUrl": { + "format": "uri", + "type": "string" + }, + "raceWeekend": { + "additionalProperties": false, + "properties": { + "circuit": { + "type": "string" + }, + "country": { + "type": "string" + }, + "countryCode": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "endDate": { + "type": "string" + }, + "latestResultKind": { + "anyOf": [ + { + "enum": [ + "sprint", + "qualifying", + "race" + ], + "type": "string" + }, + { + "type": "null" + } + ] + }, + "location": { + "type": "string" + }, + "meetingKey": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "name": { + "type": "string" + }, + "officialName": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "recap": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "detail": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "summary": { + "type": "string" + } + }, + "required": [ + "summary", + "detail" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "resultHighlights": { + "items": { + "additionalProperties": false, + "properties": { + "constructorName": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "driverName": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "position": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "position", + "driverName", + "constructorName" + ], + "type": "object" + }, + "type": "array" + }, + "resultStatus": { + "enum": [ + "notStarted", + "pending", + "available" + ], + "type": "string" + }, + "resultSummary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "round": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "sessions": { + "items": { + "additionalProperties": false, + "properties": { + "endDate": { + "type": "string" + }, + "id": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "enum": [ + "practice", + "sprintQualifying", + "sprint", + "qualifying", + "race", + "other" + ], + "type": "string" + }, + "name": { + "type": "string" + }, + "startDate": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "kind", + "startDate", + "endDate" + ], + "type": "object" + }, + "type": "array" + }, + "startDate": { + "type": "string" + }, + "status": { + "enum": [ + "scheduled", + "cancelled" + ], + "type": "string" + }, + "statusNote": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "winner": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "constructorName": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "driverName": { + "type": "string" + } + }, + "required": [ + "driverName", + "constructorName" + ], + "type": "object" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "meetingKey", + "round", + "name", + "circuit", + "location", + "country", + "countryCode", + "startDate", + "endDate", + "status", + "statusNote", + "resultStatus", + "winner", + "resultSummary", + "sessions", + "officialName", + "latestResultKind", + "resultHighlights", + "recap" + ], + "type": "object" + }, + "sourceUrl": { + "format": "uri", + "type": "string" + }, + "year": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + }, + "required": [ + "year", + "canonicalUrl", + "sourceUrl", + "raceWeekend" + ], + "type": "object" +}
- Changed
get_f1_season_schedule2 fields changed- added
Input schema / properties / year / descriptionAdded value: +"Formula 1 season year." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "canonicalUrl": { + "format": "uri", + "type": "string" + }, + "generatedAt": { + "type": "string" + }, + "lastVerifiedAt": { + "type": "string" + }, + "raceCount": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "races": { + "items": { + "additionalProperties": false, + "properties": { + "circuit": { + "type": "string" + }, + "country": { + "type": "string" + }, + "countryCode": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "endDate": { + "type": "string" + }, + "location": { + "type": "string" + }, + "meetingKey": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "name": { + "type": "string" + }, + "resultStatus": { + "enum": [ + "notStarted", + "pending", + "available" + ], + "type": "string" + }, + "resultSummary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "round": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "sessions": { + "items": { + "additionalProperties": false, + "properties": { + "endDate": { + "type": "string" + }, + "id": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "enum": [ + "practice", + "sprintQualifying", + "sprint", + "qualifying", + "race", + "other" + ], + "type": "string" + }, + "name": { + "type": "string" + }, + "startDate": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "kind", + "startDate", + "endDate" + ], + "type": "object" + }, + "type": "array" + }, + "startDate": { + "type": "string" + }, + "status": { + "enum": [ + "scheduled", + "cancelled" + ], + "type": "string" + }, + "statusNote": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "winner": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "constructorName": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "driverName": { + "type": "string" + } + }, + "required": [ + "driverName", + "constructorName" + ], + "type": "object" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "meetingKey", + "round", + "name", + "circuit", + "location", + "country", + "countryCode", + "startDate", + "endDate", + "status", + "statusNote", + "resultStatus", + "winner", + "resultSummary", + "sessions" + ], + "type": "object" + }, + "type": "array" + }, + "refreshIntervalSeconds": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "source": { + "const": "OpenF1", + "type": "string" + }, + "sourceUrl": { + "format": "uri", + "type": "string" + }, + "staleAfter": { + "type": "string" + }, + "year": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + }, + "required": [ + "year", + "source", + "generatedAt", + "lastVerifiedAt", + "staleAfter", + "refreshIntervalSeconds", + "canonicalUrl", + "sourceUrl", + "raceCount", + "races" + ], + "type": "object" +}
- Changed
get_f1_standings2 fields changed- added
Input schema / properties / year / descriptionAdded value: +"Formula 1 season year." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "canonicalUrl": { + "format": "uri", + "type": "string" + }, + "constructors": { + "items": { + "additionalProperties": false, + "properties": { + "colour": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "constructorName": { + "type": "string" + }, + "logoUrl": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "points": { + "minimum": 0, + "type": "number" + }, + "position": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "position", + "points", + "constructorName", + "colour", + "logoUrl" + ], + "type": "object" + }, + "type": "array" + }, + "drivers": { + "items": { + "additionalProperties": false, + "properties": { + "driverName": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "driverNumber": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "headshotUrl": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "points": { + "minimum": 0, + "type": "number" + }, + "position": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "position", + "points", + "driverNumber", + "driverName", + "headshotUrl" + ], + "type": "object" + }, + "type": "array" + }, + "sessionKey": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "sourceUrl": { + "format": "uri", + "type": "string" + }, + "year": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + }, + "required": [ + "year", + "sessionKey", + "canonicalUrl", + "sourceUrl", + "drivers", + "constructors" + ], + "type": "object" +}
3 tool updates
- First observed
get_f1_race_weekend - First observed
get_f1_season_schedule - First observed
get_f1_standings
Related MCP Connectors
- F1LapsOAuthcom.f1laps
Read-only F1 game laps, telemetry, setups, leaderboard benchmarks, and progress.
Read-only approved AI tools, public stacks, guides, and evidence-aware comparisons.
Anonymous public tools for ZacharyR0th. See the published agent boundary before use.
Related MCP Servers
- AlicenseCqualityCmaintenanceEnables Claude to answer Formula 1 questions using real public data: race, sprint and qualifying results back to 1950, lap and sector times, 4 Hz car telemetry, tyre stints, pit stops and undercut strategy, plus locally drawn speed-trace and gear-shift plots. Also covers live session timing — positions, gaps, tyres, flags and weather — through 77 read-only tools that need no account, login or API key.77MIT
- AlicenseNot gradedqualityCmaintenanceProvides comprehensive Formula 1 data and analytics for Claude Desktop, including race results, telemetry, standings, and strategy insights through 36+ tools.1MIT
- AlicenseNot gradedqualityDmaintenanceEnables Formula 1 data analysis through natural language, providing tools like track dominance, lap time analysis, and team performance comparisons.Apache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to query real-time and historical Formula 1 data through the OpenF1 API, providing tools for driver info, lap times, telemetry, race events, and more.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.