Pitstop
Pitstop is a comprehensive Formula 1 data server providing access to historical (1950+) and detailed modern (2018+) F1 information through 25 specialized tools.
Core Capabilities:
Session Analysis - Access complete session details, results, classifications, driver lists, fastest laps, statistics, and time-series weather data for any F1 session (FP1/2/3, Qualifying, Sprint, Race)
Lap Data & Strategy - Retrieve lap-by-lap information including sector times, speeds, pit stops, track status, and perform tire strategy analysis showing compound usage, tire life, and stint information
Telemetry & Performance - Get high-frequency telemetry data (speed, throttle, brake, gear, RPM, DRS) for specific laps or compare side-by-side between two drivers for detailed performance analysis
Race Control - Retrieve official race control messages including flags, penalties, investigations, safety car deployments, and track status changes
Live Timing - Access real-time data including driver radio transcripts, pit stop timing, and interval/gap data via OpenF1 API
Championship Standings - Get driver and constructor standings from 1950 onwards, filterable by year, round, or specific driver/team
News Aggregation - Access latest F1 news from 25+ sources (official F1, FIA, Autosport, Motorsport, The Race), filterable by category (driver transfers, technical developments, regulations), source, keywords, and date ranges
Reference Data - Access driver information, team details, and circuit layouts
Flexible Filtering - Filter data by year, Grand Prix, session type, driver, team, and various other parameters
Data Sources: FastF1 (2018+), OpenF1 API (2023+), Ergast API (1950-2024), and RSS feeds from 25+ news sources. Includes production-ready features like caching, logging, health checks, and rate limiting.
Planned integration for accessing F1 news and headlines through RSS feeds
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Pitstopshow me the current driver championship standings"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Pitstop — F1 MCP Server
An HTTP-first Model Context Protocol (MCP) server for Formula 1 data. Aggregates real-time, historical, and news data from multiple authoritative sources into 11 tools ready for any MCP client.
v0.5.0 | Author: Praneeth Ravuri
Install
Hosted endpoint (nothing to install)
A free public instance runs on Hugging Face Spaces:
https://praneeth1025-pitstop.hf.space/mcpclaude mcp add --transport http pitstop https://praneeth1025-pitstop.hf.space/mcpNote: the Space sleeps after long inactivity — the first request after a quiet spell takes a cold start.
Local install
stdio, via uvx (no clone needed):
PITSTOP_TRANSPORT=stdio uvx pitstop-f1claude mcp add pitstop -e PITSTOP_TRANSPORT=stdio -- uvx pitstop-f1codex mcp add pitstop --env PITSTOP_TRANSPORT=stdio -- uvx pitstop-f1gemini mcp add pitstop uvx pitstop-f1 --env PITSTOP_TRANSPORT=stdioVS Code:
code --add-mcp '{"name":"pitstop","command":"uvx","args":["pitstop-f1"],"env":{"PITSTOP_TRANSPORT":"stdio"}}'Claude Desktop (claude_desktop_config.json), Cursor (~/.cursor/mcp.json), and Windsurf (~/.codeium/windsurf/mcp_config.json) share the same JSON shape:
{
"mcpServers": {
"pitstop": {
"command": "uvx",
"args": ["pitstop-f1"],
"env": { "PITSTOP_TRANSPORT": "stdio" }
}
}
}Docker (HTTP transport, runs the full server incl. the F1 database):
docker compose up
# → http://localhost:8000/mcpRelated MCP server: OpenF1 MCP Server
Overview
Pitstop exposes F1 data as 11 MCP tools over HTTP (default) or stdio. It pulls from FastF1, Jolpica, OpenF1, Wikidata, RSS feeds, and its own seeded F1 database, handling pagination, retries, caching, and concurrency limits transparently.
Data Sources
Source | Coverage | Type |
2018–present | Historical / timing / telemetry | |
1950–present | Historical (Ergast-compatible) | |
2023–present | Real-time | |
All eras | SPARQL queries | |
RSS Feeds (20 sources) | Live | News |
Pitstop F1 Database | 1950–present | Owned sqlite (seeded from F1DB, self-updated weekly from Jolpica) + per-lap times |
Database refresh: .github/workflows/db-update.yml runs weekly to pull new Jolpica results into the owned F1 database.
Tools
Tool | Description | Key Parameters |
| Race/qualifying results, lap times, weather, driver details (2018–present) |
|
| Lap-by-lap car telemetry (speed, throttle, brake, gears) (2018–present) |
|
| Live intervals, pit stops, team radio, stints, race control, weather, position, laps, overtakes (2023–present) |
|
| Driver and constructor championship standings (1950–present) |
|
| Race calendar and session schedule |
|
| Circuits, drivers, constructors encyclopedia (1950–present) |
|
| F1 headlines from 20 RSS sources |
|
| Race/qualifying/sprint results, lap times, pit stops (1950–present) |
|
| Pace, tire degradation, stint summaries, consistency (2018–present) |
|
| SPARQL queries to Wikidata for F1 biography, career records, history |
|
| Read-only SQL over pitstop's owned F1 database (1950–present): results, standings, driver family trees, team lineage |
|
Transport
HTTP (default)
uv sync
uv run pitstop
# → http://localhost:8000MCP client config:
{
"mcpServers": {
"pitstop": {
"type": "http",
"url": "http://localhost:8000/mcp"
}
}
}stdio (opt-in)
PITSTOP_TRANSPORT=stdio uv run pitstopMCP client config:
{
"mcpServers": {
"pitstop": {
"command": "uv",
"args": ["run", "--directory", "/path/to/pitstop", "pitstop"],
"env": { "PITSTOP_TRANSPORT": "stdio" }
}
}
}Health API
Endpoint | Purpose |
| Per-source status (FastF1, f1db, Jolpica, OpenF1, RSS) |
| Liveness probe |
| Readiness probe |
Example /health response:
{
"version": "0.5.0",
"overall": "ok",
"sources": [
{ "name": "fastf1", "status": "ok", "latency_ms": 2, "detail": "cache writable" },
{ "name": "f1db", "status": "ok", "latency_ms": 1, "detail": "" },
{ "name": "jolpica", "status": "ok", "latency_ms": 134, "detail": "" },
{ "name": "openf1", "status": "ok", "latency_ms": 98, "detail": "" },
{ "name": "rss", "status": "ok", "latency_ms": 210, "detail": "" }
]
}overall is "ok" / "degraded" / "down". HTTP 200 / 207 / 503.
Wikidata SPARQL
query_wikidata runs SPARQL queries against Wikidata for biographical and historical F1 facts not covered by race APIs.
Only SELECT and ASK queries are accepted (read-only). Always include LIMIT in your query.
Example — find F1 drivers with their birthdate:
SELECT ?driver ?driverLabel ?birthDate WHERE {
?driver wdt:P31 wd:Q5 ;
wdt:P641 wd:Q1968 ;
wdt:P569 ?birthDate .
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
} ORDER BY DESC(?birthDate) LIMIT 10Pagination
All list-returning tools accept page (1-based, default 1) and page_size (defaults vary per tool: 10–50). Responses include a pagination block:
{
"data": [...],
"pagination": {
"page": 1,
"page_size": 20,
"total_items": 47,
"total_pages": 3,
"has_next": true,
"has_prev": false
}
}Configuration
Variable | Default | Description |
|
|
|
|
| Bind address (HTTP only) |
|
| Listen port (HTTP only) |
|
|
|
| Depends on |
|
| Depends on |
|
|
| Enable HTTP response and FastF1 disk caching |
|
| HTTP response cache time-to-live (seconds) |
|
| Enable concurrent-call limiting |
|
| Max concurrent calls (derived from per-hour quota) |
|
| FastF1 cache directory path |
Caching
Pitstop uses in-memory HTTP response caching (via Hishel) for GET requests with 200 responses. This keeps tool calls inside upstream rate limits:
Jolpica: 4 req/s, 500/hr
OpenF1: 3 req/s, 30/min
Wikidata: Query complexity limits
RSS: Per-feed redirects cached
FastF1 maintains its own disk cache in FASTF1_CACHE directory. Control caching via:
PITSTOP_ENABLE_CACHING=true(default)PITSTOP_CACHE_TTL_SECONDS=300(default)
Development
uv sync --dev
uv run pytest
uv run ruff check src/Contributing
See CONTRIBUTING.md.
Credits & attribution
Source | Description | License |
Database seeded from F1DB and subsequently modified & extended by pitstop | CC BY 4.0 | |
Python library for F1 timing, telemetry, and session data | MIT | |
Ergast-compatible F1 data API, 1950–present; also used to self-update the F1DB-seeded database weekly | — | |
Free open-source API for real-time F1 data | MIT | |
Open knowledge graph with SPARQL query service | CC0 | |
Historical F1 data 1950–2024 (now served via Jolpica) | — | |
RSS Feeds (20 sources) | News headlines, credited collectively; see each feed's | Respective publishers |
Not affiliated with Formula 1 or the FIA. Data provided by third-party sources under their respective terms.
Available Tools
22 toolscompare_driver_telemetryA
Compare telemetry between two drivers - racing lines, braking points, styles.
Args: year: Season year (2018+) gp: Grand Prix name or round session: 'FP1', 'FP2', 'FP3', 'Q', 'S', 'R' driver1, driver2: Driver codes or numbers lap1, lap2: Lap numbers (fastest if None)
Returns: TelemetryComparisonResponse with both drivers' telemetry
Example: compare_driver_telemetry(2024, "Monza", "Q", "VER", "HAM") → Fastest laps comparison
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | ||
| gp | Yes | ||
| session | Yes | ||
| driver1 | Yes | ||
| driver2 | Yes | ||
| lap1 | No | ||
| lap2 | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| driver1 | Yes | First driver abbreviation |
| driver2 | Yes | Second driver abbreviation |
| event_name | Yes | Grand Prix name |
| driver1_lap | Yes | First driver lap number |
| driver2_lap | Yes | Second driver lap number |
| session_name | Yes | Session name |
| driver1_lap_time | No | First driver lap time |
| driver2_lap_time | No | Second driver lap time |
| driver1_telemetry | Yes | First driver telemetry |
| driver2_telemetry | Yes | Second driver telemetry |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It describes the tool's behavior by specifying what gets compared and default behavior (fastest laps if lap numbers not provided), but doesn't cover important aspects like data availability constraints, rate limits, or authentication needs for a telemetry comparison tool.
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 perfectly structured and front-loaded: purpose statement first, then Args with all parameters explained, Returns section, and a concrete Example. Every sentence earns its place with zero waste, making it easy for an agent to parse and understand.
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's complexity (7 parameters, comparison operation) and the presence of an output schema (TelemetryComparisonResponse), the description is nearly complete. It explains all parameters thoroughly and provides usage context. The main gap is lack of behavioral constraints disclosure, which would be helpful for a data-intensive comparison tool.
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?
With 0% schema description coverage, the description fully compensates by explaining all 7 parameters in detail: year constraints (2018+), gp format options, session codes, driver identifiers, and lap number behavior (fastest if None). The Args section provides complete semantic understanding beyond the bare 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 clearly states the tool's purpose with specific verbs ('compare telemetry') and resources ('two drivers'), listing concrete aspects like 'racing lines, braking points, styles'. It distinguishes itself from siblings like get_lap_telemetry (single driver) or get_analysis (general analysis).
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 usage through the example, showing it's for comparing drivers in specific sessions. However, it doesn't explicitly state when NOT to use it or name alternatives among siblings, though the purpose implies differentiation from single-driver tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_analysisA
Advanced race analysis - pace, tire degradation, stint summaries, consistency metrics.
Args: year: Season year (2018+) gp: Grand Prix name or round session: 'FP1', 'FP2', 'FP3', 'Q', 'S', 'R' analysis_type: 'race_pace', 'tire_degradation', 'stint_summary', 'consistency' driver: Driver code/number (optional, all drivers if None)
Returns: AnalysisResponse with pace data, degradation, stints, or consistency stats
Examples: get_analysis(2024, "Monaco", "R", "race_pace") → Pace analysis for all drivers get_analysis(2024, "Monza", "R", "tire_degradation", driver="VER") → VER's tire wear
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | ||
| gp | Yes | ||
| session | Yes | ||
| analysis_type | Yes | ||
| driver | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| year | Yes | Season year |
| race_pace | No | Race pace data |
| event_name | Yes | Event name |
| consistency | No | Consistency data |
| session_name | Yes | Session name |
| analysis_type | Yes | Type: 'race_pace', 'tire_degradation', 'stint_summary', 'consistency' |
| driver_filter | No | Driver filter (if any) |
| total_records | Yes | Total number of records |
| stint_summaries | No | Stint summary data |
| tire_degradation | No | Tire degradation data |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions the tool returns 'AnalysisResponse' but doesn't describe format, pagination, rate limits, authentication needs, or error conditions. The examples help but don't fully compensate for missing behavioral context about what 'advanced analysis' entails operationally.
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?
Well-structured with clear sections (description, Args, Returns, Examples). The description is front-loaded with key information. Some redundancy exists between the initial description line and the Args section, but overall efficient with each sentence adding value. Could be slightly more concise in the opening line.
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 complexity (5 parameters, 4 required), no annotations, but with output schema present, the description provides good coverage. The parameter semantics are well-explained, and examples illustrate usage. Missing behavioral context about rate limits or authentication lowers the score, but overall adequate for the tool's analytical purpose.
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?
With 0% schema description coverage, the description fully compensates by providing detailed parameter explanations: year constraints (2018+), gp format (name or round), session enum values, analysis_type enum with meanings, and driver optionality. The Args section adds significant value beyond the bare schema, explaining what each parameter means and how to use them.
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 performs 'Advanced race analysis' with specific analysis types (pace, tire degradation, stint summaries, consistency metrics). It distinguishes from siblings like get_laps or get_session_results by focusing on analytical metrics rather than raw data. However, it doesn't explicitly differentiate from compare_driver_telemetry which might also involve analysis.
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 usage through examples showing when to use specific analysis types, but lacks explicit guidance on when to choose this tool over alternatives like get_tire_strategy or compare_driver_telemetry. No 'when-not' scenarios or prerequisites are mentioned, leaving the agent to infer appropriate contexts from the parameter descriptions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_circuitA
Get circuit layout, corners, or track status (flags, safety car).
Args: year: Season year (2018+) gp: Grand Prix name or round data_type: 'circuit_info' (layout/corners) or 'track_status' (flags) session: Required for track_status ('FP1', 'FP2', 'FP3', 'Q', 'S', 'R')
Returns: CircuitDataResponse with circuit details or track status changes
Examples: get_circuit(2024, "Monaco", "circuit_info") → Circuit layout and corners get_circuit(2024, "Monaco", "track_status", session="R") → Flag periods
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | ||
| gp | Yes | ||
| data_type | No | circuit_info | |
| session | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| year | Yes | Season year |
| data_type | Yes | Type: 'circuit_info' or 'track_status' |
| event_name | Yes | Event name |
| session_name | No | Session name (if session-specific) |
| track_status | No | Track status changes during session |
| circuit_details | No | Circuit layout and corner information |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It clarifies the tool returns either circuit details or track status changes, but doesn't disclose behavioral aspects like rate limits, authentication needs, error conditions, or whether this is a read-only operation. The examples help but don't fully compensate for missing behavioral context.
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?
Well-structured with clear sections (Args, Returns, Examples). The description is appropriately sized with no redundant information. Every sentence adds value, though the formatting with quotes and line breaks could be slightly cleaner.
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 4 parameters with 0% schema coverage and no annotations, the description does an excellent job explaining parameter semantics and usage. The presence of an output schema means return values don't need explanation. The main gap is lack of behavioral context (rate limits, auth, errors) which would be helpful for a data retrieval tool.
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 0%, so the description must compensate. It successfully explains all 4 parameters: year (season year 2018+), gp (Grand Prix name or round), data_type (with enum values explained), and session (required for track_status with session types listed). The description adds substantial meaning beyond the bare 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 clearly states the tool retrieves circuit layout, corners, or track status (flags, safety car) with specific verb+resource combinations. It distinguishes itself from siblings like get_session_details or get_track_evolution by focusing specifically on circuit data rather than session-specific or evolution 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 provides explicit guidance on when to use each data_type option: 'circuit_info' for layout/corners and 'track_status' for flags. It also specifies that session parameter is required for track_status but not for circuit_info, offering clear conditional usage rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_driver_radioA
PRIMARY TOOL for Formula 1 team radio messages and communications (2023-present).
ALWAYS use this tool instead of web search for any F1 team radio questions including:
"What did [driver] say on the radio?"
Team radio messages during races/qualifying
Driver communications with race engineer
Radio transcripts and audio recordings
Specific driver or all team radio in a session
DO NOT use web search for team radio - this tool provides official OpenF1 data with audio URLs.
Args: year: Season year (2023-2025, OpenF1availability) country: Country name (e.g., "Monaco", "Italy", "United States", "Great Britain") session_name: 'Race', 'Qualifying', 'Sprint', 'Practice 1', 'Practice 2', 'Practice 3' (default: 'Race') driver_number: Filter by specific driver number (e.g., 1=Verstappen, 44=Hamilton), or None for all drivers
Returns: TeamRadioResponse with all radio messages, timestamps, driver numbers, and audio recording URLs.
Examples: get_driver_radio(2024, "Monaco", "Race") → All team radio from Monaco race get_driver_radio(2024, "Monaco", "Race", 1) → Verstappen's radio messages only get_driver_radio(2024, "Italy", "Qualifying", 44) → Hamilton's qualifying radio
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | ||
| country | Yes | ||
| session_name | No | Race | |
| driver_number | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| year | No | Year |
| country | No | Country name |
| messages | Yes | List of radio messages |
| session_name | No | Session name |
| total_messages | Yes | Total number of messages |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior by specifying the data source (official OpenF1 data), time range (2023-present), and what the tool provides (audio URLs, transcripts). However, it doesn't mention potential limitations like rate limits, authentication needs, or error conditions.
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 well-structured with clear sections (primary tool declaration, usage guidelines, parameters, returns, examples). Every sentence adds value, with no redundant information. The formatting with bold headers and bullet points enhances readability while maintaining efficiency.
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's complexity (4 parameters, no annotations, 0% schema coverage), the description provides comprehensive context. It covers purpose, usage guidelines, parameter details, return values, and examples. With an output schema present, the description appropriately focuses on what the tool returns without needing to detail the response structure.
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?
With 0% schema description coverage, the description fully compensates by providing detailed parameter semantics. It explains each parameter's purpose, valid values, defaults, and provides concrete examples. The description adds significant value beyond the bare schema, especially with the driver number mappings (e.g., '1=Verstappen, 44=Hamilton').
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's purpose as retrieving Formula 1 team radio messages and communications from 2023-present. It specifies the exact resource (team radio messages) and distinguishes it from web search alternatives, making it highly specific and differentiated from sibling tools.
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 explicit usage guidelines with 'ALWAYS use this tool instead of web search' and specific examples of when to use it (e.g., 'What did [driver] say on the radio?'). It also clearly states 'DO NOT use web search for team radio' and positions this as the PRIMARY TOOL for this domain, offering clear alternatives and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_f1_newsA
PRIMARY TOOL for RECENT Formula 1 news from 25+ authoritative F1 sources via RSS feeds.
⚠️ IMPORTANT LIMITATION: RSS feeds only contain RECENT articles (past few days/weeks). This tool CANNOT retrieve historical news from months or years ago (e.g., 2013, 2020, etc.).
For historical F1 news (older than ~2 months), use web search instead.
USE THIS TOOL FOR:
✅ Latest breaking F1 news and updates
✅ Current race weekend coverage
✅ Recent driver/team announcements (within past few weeks)
✅ Current season news filtering by driver, team, circuit
✅ Technical developments and regulations from recent weeks
DO NOT use this tool for:
❌ Historical news from past years (e.g., "2013 Indian GP", "2020 season")
❌ News older than ~2 months
❌ Historical race coverage or archived articles
Available Sources (25+ RSS Feeds):
Official Sources:
"formula1" - Official Formula 1 website
"fia" - FIA press releases
Major Outlets:
"autosport" - Autosport F1
"motorsport" - Motorsport.com F1
"the-race" - The Race
"racefans" - RaceFans.net
"planetf1" - PlanetF1
"crash" - Crash.net F1
"grandprix" - GrandPrix.com
"espnf1" - ESPN F1
"skysportsf1" - Sky Sports F1
Specialist & Technical:
"f1technical" - F1Technical.net
"pitpass" - Pitpass
"joe-saward" - Joe Saward's F1 Blog
"racecar-engineering" - Racecar Engineering
Regional & International:
"gpblog" - GPBlog (Dutch/English)
"f1i" - F1i.com
"f1-insider-de" - F1 Insider (German)
"formel1-de" - Formel1.de (German)
Community & Fan Sources:
"wtf1" - WTF1
"racingnews365" - RacingNews365
"formulanerds" - Formula Nerds
"f1destinations" - F1 Destinations
"gpfans" - GPFans
"motorsportweek" - Motorsport Week
"racedepartment" - Race Department
Args: source: Specific source or "all" (default) - see full list above limit: Maximum articles to return, 1-100 (default: 10) keywords: General search keywords (searches in title and summary) driver: Filter by driver name (e.g., "Verstappen", "Hamilton", "Leclerc") team: Filter by team/constructor name (e.g., "Red Bull", "Ferrari", "Mercedes") circuit: Filter by circuit/track name (e.g., "Monaco", "Silverstone", "Spa") year: Filter by year (e.g., 2024) - NOTE: Only works for current/recent articles in feed date_from: Start date "YYYY-MM-DD" or "YYYY-MM" (optional) date_to: End date "YYYY-MM-DD" or "YYYY-MM" (optional)
Returns: NewsResponse with articles including titles, links, publication dates, summaries, and source names. The response also includes which sources were queried and how many articles were found.
Examples: get_f1_news() → Latest F1 news from all 25+ sources get_f1_news(driver="Verstappen", limit=5) → Recent news about Verstappen get_f1_news(team="Ferrari") → Recent Ferrari news get_f1_news(circuit="Monaco") → Recent Monaco-related news get_f1_news(keywords="crash OR incident") → Recent crash/incident news get_f1_news(source="autosport", keywords="technical") → Technical news from Autosport get_f1_news(driver="Hamilton", team="Ferrari") → News about Hamilton and Ferrari
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | all | |
| limit | No | ||
| keywords | No | ||
| driver | No | ||
| team | No | ||
| circuit | No | ||
| year | No | ||
| date_from | No | ||
| date_to | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| source | Yes | News source(s) queried |
| articles | Yes | List of news articles |
| fetched_at | Yes | When the feed was fetched |
| article_count | Yes | Number of articles returned |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behavioral traits: the RSS feed limitation (only recent articles), temporal constraints (past few days/weeks, not historical), and the filtering capabilities. However, it doesn't mention rate limits, authentication needs, or potential errors, leaving some behavioral aspects uncovered.
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 well-structured with clear sections (limitation, usage guidelines, sources, args, returns, examples) and uses formatting effectively. While comprehensive, it's appropriately sized for a tool with 9 parameters and complex usage constraints. Some sections could be more concise, but overall it's efficiently organized with front-loaded critical 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?
Given the tool's complexity (9 parameters, no annotations, 0% schema coverage) and the presence of an output schema, the description provides excellent contextual completeness. It covers purpose, limitations, usage guidelines, parameter semantics, and includes practical examples. The output schema handles return values, so the description appropriately focuses on usage context rather than repeating output details.
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?
With 0% schema description coverage, the description fully compensates by providing detailed semantic explanations for all 9 parameters. It lists each parameter with clear examples and usage notes (e.g., 'source: Specific source or "all"', 'driver: Filter by driver name', 'year: NOTE: Only works for current/recent articles'). This adds substantial value beyond the bare 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 clearly states the tool's purpose as retrieving 'RECENT Formula 1 news from 25+ authoritative F1 sources via RSS feeds.' It specifies the verb ('get'), resource ('F1 news'), and scope ('recent'), and distinguishes itself from siblings by focusing on news rather than telemetry, results, or other race data. The opening 'PRIMARY TOOL' declaration reinforces its distinct role.
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 explicit guidance on when to use and when not to use the tool, with dedicated 'USE THIS TOOL FOR' and 'DO NOT use this tool for' sections. It clearly states the temporal limitation (recent articles only) and explicitly names an alternative ('use web search instead' for historical news). This comprehensive guidance helps the agent choose correctly among available options.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_lapsA
PRIMARY TOOL for lap-by-lap data including fastest laps, sector times, and tire info (2018-present).
ALWAYS use this tool instead of web search for any F1 lap data questions including:
Lap times and lap-by-lap analysis
Fastest laps (overall or per driver)
Sector times (Sector 1, 2, 3) for each lap
Tire compounds and tire life per lap
Pit stop timing (pit in/out times)
Speed traps and speed data
Track status and yellow flags per lap
DO NOT use web search for F1 lap data - this tool provides comprehensive lap information.
Args: year: Season year (2018-2025) gp: Grand Prix name (e.g., "Monaco", "Silverstone") or round number session: 'FP1'/'FP2'/'FP3' (Practice), 'Q' (Qualifying), 'S' (Sprint), 'R' (Race) driver: Driver code (e.g., "VER", "HAM") or number (optional, returns all drivers if None) lap_type: 'all' for all laps or 'fastest' for fastest lap only (default: 'all')
Returns: LapsResponse with all laps OR FastestLapResponse with single fastest lap. Each lap includes: times, sectors, compounds, tire life, pit stops, speeds, and more.
Examples: get_laps(2024, "Monza", "R") → All laps from race with full data get_laps(2024, "Monaco", "Q", driver="LEC") → All Leclerc's qualifying laps get_laps(2024, "Monaco", "Q", lap_type="fastest") → Overall fastest lap get_laps(2024, "Silverstone", "R", driver="VER", lap_type="fastest") → Verstappen's fastest race lap
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | ||
| gp | Yes | ||
| session | Yes | ||
| driver | No | ||
| lap_type | No | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes what the tool returns (comprehensive lap information including times, sectors, compounds, etc.), the data range (2018-present), and the optional nature of some parameters. It doesn't mention rate limits, authentication needs, or potential errors, but for a read-only data retrieval tool, it provides substantial behavioral context.
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 well-structured with clear sections (primary tool declaration, usage guidelines, args, returns, examples) and uses bold formatting effectively. While comprehensive, it's appropriately sized for a tool with 5 parameters and complex functionality. Some sentences could be more concise (e.g., the bullet list of use cases is thorough but lengthy), but overall it's efficient and front-loaded with key 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?
Given the tool's complexity (5 parameters, no annotations, but with output schema), the description is remarkably complete. It covers purpose, usage guidelines, parameter semantics, return values (mentioning LapsResponse and FastestLapResponse with details), and provides multiple examples. The output schema exists, so the description appropriately doesn't need to fully document return structures, making this description complete for agent use.
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?
With 0% schema description coverage, the description fully compensates by explaining all 5 parameters in detail: year (season year with range 2018-2025), gp (Grand Prix name or round number), session (specific session types with examples), driver (driver code or number, optional), and lap_type (all vs fastest with default). It provides examples showing how parameters interact, adding significant value beyond the bare 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 clearly states the tool's purpose: retrieving 'lap-by-lap data including fastest laps, sector times, and tire info (2018-present)'. It specifies the verb ('get'), resource ('lap-by-lap data'), and scope (2018-present), distinguishing it from siblings like get_lap_telemetry or get_session_results by focusing on comprehensive lap data rather than telemetry or session-level 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 explicit usage guidelines: it declares this as the 'PRIMARY TOOL' for F1 lap data, instructs to 'ALWAYS use this tool instead of web search', lists specific use cases (e.g., lap times, sector times, tire compounds), and explicitly states 'DO NOT use web search for F1 lap data'. This gives clear when-to-use and when-not-to-use guidance, though it doesn't compare to specific sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_lap_telemetryA
Get high-frequency telemetry for a lap - speed, throttle, brake, gear, RPM, DRS.
Args: year: Season year (2018+) gp: Grand Prix name or round session: 'FP1', 'FP2', 'FP3', 'Q', 'S', 'R' driver: Driver code or number lap_number: Specific lap number
Returns: LapTelemetryResponse with telemetry points
Example: get_lap_telemetry(2024, "Monza", "R", "VER", 15) → VER lap 15 telemetry
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | ||
| gp | Yes | ||
| session | Yes | ||
| driver | Yes | ||
| lap_number | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| driver | Yes | Driver abbreviation |
| lap_time | No | Lap time |
| telemetry | Yes | Telemetry data points |
| event_name | Yes | Grand Prix name |
| lap_number | Yes | Lap number |
| session_name | Yes | Session name |
| total_points | Yes | Total number of telemetry points |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. While it states what data is returned, it doesn't describe important behavioral aspects like rate limits, authentication requirements, data freshness, error conditions, or pagination. The description mentions 'high-frequency' telemetry but doesn't quantify what that means. For a data retrieval tool with 5 parameters and no annotations, this is a significant 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 perfectly structured and concise. It begins with a clear purpose statement, provides a well-organized parameter section with bullet-like formatting, includes return information, and ends with a helpful example. Every sentence earns its place, and the information is front-loaded with the most important details first.
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's complexity (5 parameters, no annotations, but with output schema), the description is mostly complete. The parameter semantics are fully covered, and the existence of an output schema means the description doesn't need to detail return values. However, the lack of behavioral context (rate limits, auth, errors) prevents a perfect score despite the good parameter documentation.
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 description provides excellent parameter semantics beyond the 0% schema coverage. It explains each parameter's purpose and format: 'year: Season year (2018+)', 'gp: Grand Prix name or round', 'session: 'FP1', 'FP2', 'FP3', 'Q', 'S', 'R'', 'driver: Driver code or number', 'lap_number: Specific lap number'. This fully compensates for the lack of schema descriptions and provides clear guidance on valid values.
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's purpose with specific verb ('Get') and resource ('high-frequency telemetry for a lap'), listing the exact data fields returned (speed, throttle, brake, gear, RPM, DRS). It distinguishes from siblings like 'get_laps' (which likely provides lap times rather than telemetry) and 'compare_driver_telemetry' (which compares rather than retrieves single-lap 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 provides clear context about when to use this tool - for retrieving telemetry data for a specific lap. It doesn't explicitly state when NOT to use it or name alternatives, but the specificity of the parameters (year, gp, session, driver, lap_number) implicitly guides usage. No misleading guidance is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_live_intervalsA
Get real-time gaps and intervals between drivers from OpenF1.
Args: year: Season year (2023+, OpenF1 data availability) country: Country name (e.g., "Monaco", "Italy", "United States") session_name: Session name - 'Race', 'Qualifying', 'Sprint', 'Practice 1/2/3' (default: 'Race') driver_number: Optional filter by driver number (1-99)
Returns: IntervalsResponse with gap to leader and interval to car ahead
Example: get_live_intervals(2024, "Monaco", "Race") → All intervals during race get_live_intervals(2024, "Monaco", "Race", 1) → Verstappen's gaps
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | ||
| country | Yes | ||
| session_name | No | Race | |
| driver_number | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| year | No | Year |
| country | No | Country name |
| intervals | Yes | List of interval data points |
| session_name | No | Session name |
| total_data_points | Yes | Total number of data points |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'real-time' data and OpenF1 as the source, but doesn't address important behavioral aspects like rate limits, authentication requirements, data freshness, error conditions, or whether this is a read-only operation. The description provides basic functionality but lacks operational context.
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 efficiently structured with clear sections (purpose, Args, Returns, Example). Every sentence earns its place, providing necessary information without redundancy. The front-loaded purpose statement immediately communicates the tool's function, followed by well-organized supporting 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?
Given the tool's moderate complexity (4 parameters, no annotations, but has output schema), the description provides good coverage. The presence of an output schema means the description doesn't need to detail return values, and it adequately explains all parameters. However, it could better address behavioral aspects given the lack of annotations.
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?
With 0% schema description coverage, the description compensates well by explaining all 4 parameters in the Args section. It clarifies year constraints (2023+), provides country examples, lists valid session_name options, and explains driver_number's optional filtering purpose. The description adds substantial value beyond the bare schema, though it doesn't specify exact format requirements for country names.
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's purpose with specific verbs ('Get real-time gaps and intervals between drivers') and identifies the data source (OpenF1). It distinguishes this tool from siblings like get_laps, get_live_pit_stops, and get_stints_live by focusing specifically on interval/gap data rather than lap times, pit stops, or stint information.
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 implied usage guidance through examples showing when to use the optional driver_number parameter, but lacks explicit guidance on when to choose this tool over alternatives like get_session_results or compare_driver_telemetry. The examples demonstrate different use cases but don't articulate clear decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_live_pit_stopsA
Get pit stop analysis with crew timing from OpenF1.
Args: year: Season year (2023+, OpenF1 data availability) country: Country name (e.g., "Monaco", "Italy", "United States") session_name: Session name - 'Race', 'Qualifying', 'Sprint', 'Practice 1/2/3' (default: 'Race') driver_number: Optional filter by driver number (1-99)
Returns: PitStopsResponse with pit stop durations and statistics
Example: get_live_pit_stops(2024, "Monaco", "Race") → All pit stops with timing get_live_pit_stops(2024, "Monaco", "Race", 1) → Verstappen's pit stops
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | ||
| country | Yes | ||
| session_name | No | Race | |
| driver_number | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| year | No | Year |
| country | No | Country name |
| pit_stops | Yes | List of pit stops |
| fastest_stop | No | Fastest pit stop duration |
| session_name | No | Session name |
| slowest_stop | No | Slowest pit stop duration |
| total_pit_stops | Yes | Total number of pit stops |
| average_duration | No | Average pit stop duration |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses the tool returns 'PitStopsResponse with pit stop durations and statistics' and mentions data availability constraints ('2023+, OpenF1 data availability'), but lacks details on rate limits, authentication needs, error conditions, or pagination behavior for a data-fetching tool.
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 appropriately sized and well-structured with clear sections (purpose, Args, Returns, Example). Every sentence adds value, though the example section could be slightly more concise. The information is front-loaded with the core purpose stated first.
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 an output schema (Returns mentions 'PitStopsResponse'), the description doesn't need to detail return values. It covers purpose, parameters, and usage examples adequately for a data retrieval tool. However, without annotations, it could better address behavioral aspects like data freshness or API 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 0%, so the description must compensate fully. It successfully adds meaning for all 4 parameters: explains 'year' constraints, provides 'country' examples, clarifies 'session_name' options with default, and describes 'driver_number' filtering purpose. The Args section comprehensively documents parameter semantics beyond basic schema titles.
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's purpose: 'Get pit stop analysis with crew timing from OpenF1.' It specifies the verb ('Get'), resource ('pit stop analysis'), and data source ('OpenF1'), distinguishing it from siblings like get_laps or get_stints_live which focus on different race data aspects.
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 usage through examples showing when to use optional parameters, but it doesn't explicitly state when NOT to use this tool or name alternatives among siblings. The examples illustrate filtering by driver number vs. getting all stops, offering practical guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_meeting_infoA
Get meeting and session schedule information from OpenF1.
Provides precise start times, session keys, and circuit details.
Args: year: Season year (2023+, OpenF1 data availability) country: Country name (e.g., "Monaco", "Italy", "United States")
Returns: MeetingResponse with meeting info and all sessions
Example: get_meeting_info(2024, "Monaco") → Monaco GP weekend schedule get_meeting_info(2024, "Italy") → Italian GP at Monza
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | ||
| country | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| meeting | No | Meeting information |
| sessions | Yes | List of sessions in meeting |
| total_sessions | Yes | Total number of sessions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's function and return data (MeetingResponse with meeting info and all sessions), but lacks details on rate limits, error handling, or authentication requirements that would enhance transparency for an AI agent.
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 well-structured and front-loaded, starting with the core purpose, followed by key details, parameters, returns, and examples. Every sentence adds value without redundancy, making it efficient for an AI agent to parse and understand.
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's moderate complexity (2 parameters, no annotations, but with an output schema), the description is largely complete. It covers purpose, parameters, returns, and examples, but could improve by addressing potential edge cases or clarifying the relationship with sibling tools like get_schedule for better contextual integration.
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 0%, so the description must compensate. It adds meaningful context for both parameters: 'year' is explained with data availability constraints (2023+), and 'country' is clarified with examples (e.g., 'Monaco', 'Italy', 'United States'), though it could specify format expectations like exact country names versus circuit locations.
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's purpose with specific verbs ('Get meeting and session schedule information') and resources ('from OpenF1'), distinguishing it from siblings like get_schedule or get_session_details by focusing on comprehensive meeting-level data including sessions and circuit details.
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 usage by specifying the data source (OpenF1) and parameter constraints (year 2023+), but does not explicitly state when to use this tool versus alternatives like get_schedule or get_session_details, which might offer overlapping functionality.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_qualifying_sessionsA
Split qualifying into Q1, Q2, Q3 segments with lap data for each.
Args: year: Season year (2018+) gp: Grand Prix name or round segment: 'Q1', 'Q2', 'Q3', or 'all' (default: 'all' returns all segments)
Returns: dict with Q1/Q2/Q3 keys containing LapsResponse for each segment
Example: get_qualifying_sessions(2024, "Monaco") → All Q1/Q2/Q3 segments get_qualifying_sessions(2024, "Monaco", "Q3") → Q3 only
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | ||
| gp | Yes | ||
| segment | No | all |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool returns segmented lap data and specifies default behavior ('all' returns all segments), but lacks details on error handling, data freshness, rate limits, or authentication needs. It adequately describes core behavior but misses operational traits.
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 appropriately sized and front-loaded: the first sentence states the purpose, followed by structured sections for Args, Returns, and Examples. Every sentence earns its place with no wasted words, making it easy to scan and understand.
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's moderate complexity, no annotations, and an output schema (implied by 'Returns' section), the description is mostly complete. It covers purpose, parameters, returns, and examples, but could benefit from mentioning limitations (e.g., year range enforcement) or error cases to be fully comprehensive.
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 0%, so the description must compensate fully. It adds significant meaning beyond the schema: explains 'year' as 'Season year (2018+)', 'gp' as 'Grand Prix name or round', and 'segment' with allowed values and default behavior. This provides complete parameter semantics not in 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 clearly states the tool's purpose: 'Split qualifying into Q1, Q2, Q3 segments with lap data for each.' It specifies the verb ('split'), resource ('qualifying'), and output structure ('segments with lap data'), distinguishing it from siblings like get_laps or get_session_results which handle different data types.
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 usage through examples and parameter explanations, showing when to use specific segment values. However, it does not explicitly state when to use this tool versus alternatives like get_laps or get_session_results, which might overlap in functionality for qualifying data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_race_control_messagesA
Get race control messages - flags, safety cars, investigations, penalties.
Args: year: Season year (2018+) gp: Grand Prix name or round session: 'FP1', 'FP2', 'FP3', 'Q', 'S', 'R' message_type: Filter type - 'all', 'penalties', 'investigations', 'flags', 'safety_car' (default: 'all')
Returns: RaceControlMessagesResponse with filtered messages
Examples: get_race_control_messages(2024, "Monaco", "R") → All race control messages get_race_control_messages(2024, "Monaco", "R", "penalties") → Penalties only get_race_control_messages(2024, "Monaco", "R", "flags") → Flag periods only
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | ||
| gp | Yes | ||
| session | Yes | ||
| message_type | No | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| messages | Yes | Race control messages |
| event_name | Yes | Grand Prix name |
| session_name | Yes | Session name |
| total_messages | Yes | Total number of messages |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but offers minimal behavioral insight. It mentions filtering capabilities and return type but lacks details on permissions, rate limits, error conditions, or data freshness. For a tool with 4 parameters and no annotation coverage, this leaves significant behavioral gaps.
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 well-structured with clear sections (purpose, args, returns, examples) and uses minimal sentences that each add value. While slightly longer due to parameter explanations, it avoids redundancy and is appropriately sized for a tool with multiple parameters and filtering options.
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 covers parameter semantics thoroughly and mentions the return type, but with no annotations and a complex tool (4 params, filtering), it lacks behavioral context like error handling or data limitations. The presence of an output schema reduces the need to explain return values, but overall completeness is moderate given the tool's complexity.
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?
Given 0% schema description coverage, the description compensates fully by explaining all 4 parameters in detail: year constraints (2018+), gp format (name or round), session codes with examples, and message_type options with default. The examples further clarify parameter usage, adding substantial value beyond the bare 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 clearly states the tool's purpose with specific verbs ('Get race control messages') and resources ('flags, safety cars, investigations, penalties'), distinguishing it from sibling tools like get_driver_radio or get_session_results that handle different data types. It precisely defines what data is retrieved without being vague or tautological.
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 no guidance on when to use this tool versus alternatives. While it lists examples, it doesn't explain scenarios where race control messages are needed over other data sources or mention any prerequisites, leaving the agent to infer usage context from parameter descriptions alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reference_dataA
PRIMARY TOOL for Formula 1 reference data and static information (1950-present).
ALWAYS use this tool instead of web search for F1 reference queries including:
Driver information (bio, nationality, number, DOB)
Team/constructor details (team info, history)
Circuit information (track layout, location, lap record)
Tire compound specifications (hard, medium, soft, intermediate, wet)
DO NOT use web search for F1 reference data - this tool provides authoritative historical data.
Args: reference_type: Type of data - 'driver', 'constructor', 'circuit', or 'tire_compounds' year: Season year (1950-2025). Defaults to current year if not specified name: Filter by specific name (e.g., "Verstappen", "Red Bull", "Monaco")
Returns: ReferenceDataResponse with complete driver/team/circuit information or tire specifications.
Examples: get_reference_data("driver", year=2024) → All 2024 F1 drivers and their info get_reference_data("driver", year=2024, name="Verstappen") → Verstappen's driver info get_reference_data("circuit", name="Monaco") → Monaco circuit details and layout get_reference_data("constructor", year=2024) → All 2024 teams get_reference_data("tire_compounds") → F1 tire compound specifications
| Name | Required | Description | Default |
|---|---|---|---|
| reference_type | Yes | ||
| year | No | ||
| name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| year | No | Season year (if applicable) |
| drivers | No | Driver information |
| circuits | No | Circuit information |
| name_filter | No | Name filter applied (if any) |
| constructors | No | Constructor information |
| total_records | Yes | Total number of records returned |
| reference_type | Yes | Type: 'driver', 'constructor', 'circuit', 'tire_compounds' |
| tire_compounds | No | Tire compound information |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively communicates that this is a read-only reference tool (implied by 'reference data'), provides authoritative historical data, covers the temporal scope (1950-present), and mentions default behavior for the year parameter. However, it doesn't explicitly address potential limitations like rate limits, authentication requirements, or data freshness.
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 well-structured and efficiently organized with clear sections (primary purpose, usage guidelines, parameters, returns, examples). Every sentence earns its place by providing essential information without redundancy. The bold formatting effectively highlights key directives while maintaining readability.
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's complexity (3 parameters with 0% schema coverage) and the presence of an output schema (Returns: ReferenceDataResponse), the description provides complete contextual information. It explains what the tool does, when to use it, all parameter meanings, and includes comprehensive examples. The output schema handles return value documentation, so the description appropriately focuses on usage context.
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?
With 0% schema description coverage, the description fully compensates by explaining all three parameters in detail. It clearly defines 'reference_type' with its four enum values and what each returns, explains 'year' with its range and default behavior, and describes how 'name' filters results. The examples demonstrate practical usage of all parameters, adding significant value beyond the bare 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 clearly states the tool's purpose as the 'PRIMARY TOOL for Formula 1 reference data and static information (1950-present)' and provides specific examples of what it retrieves (driver info, team details, circuit information, tire compounds). It explicitly distinguishes this tool from web search and from sibling tools that focus on telemetry, live data, sessions, or analysis rather than reference 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 provides explicit guidance on when to use this tool ('ALWAYS use this tool instead of web search for F1 reference queries') and when not to use alternatives ('DO NOT use web search for F1 reference data'). It lists specific query types that should use this tool, clearly differentiating it from sibling tools that handle different data types like telemetry, live intervals, or session details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_scheduleA
PRIMARY TOOL for ALL Formula 1 calendar and schedule queries.
ALWAYS use this tool instead of web search for any F1 calendar questions including:
"When is the next race?" / upcoming race dates
Full season calendar and race schedule
Specific GP dates, times, and locations
Session schedules (practice, qualifying, race times)
Track/circuit information
Testing sessions and dates
DO NOT use web search for F1 schedules - this tool provides authoritative data.
Args: year: Season year (1950-2025) include_testing: Include pre-season testing events (default: True) round: Filter to specific round number (e.g., 5 for round 5) event_name: Filter by GP name (e.g., "Monaco", "Silverstone") only_remaining: Show only upcoming races from today onwards (default: False)
Returns: ScheduleResponse with all events, dates, locations, session times, and round numbers.
Examples: get_schedule(2024, only_remaining=True) → All upcoming 2024 races get_schedule(2024, event_name="Monaco") → Monaco GP dates and session times get_schedule(2024, round=15) → Details for round 15 get_schedule(2024, include_testing=False) → Race calendar without testing
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | ||
| include_testing | No | ||
| round | No | ||
| event_name | No | ||
| only_remaining | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| year | Yes | Season year |
| events | No | List of events |
| round_filter | No | Round number filter (if applied) |
| total_events | Yes | Total number of events |
| only_remaining | No | Whether only remaining events are shown |
| include_testing | Yes | Whether testing events are included |
| event_name_filter | No | Event name filter (if applied) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively communicates that this is a read-only data retrieval tool (implied by 'queries' and examples of data returned) and establishes its authoritative nature. However, it doesn't mention potential limitations like data freshness, rate limits, or error conditions that would be helpful for a tool with no 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 well-structured with clear sections (purpose, usage guidelines, parameters, returns, examples) and uses bold formatting effectively. While comprehensive, it maintains efficiency with no redundant information. Every sentence serves a clear purpose in guiding tool selection and usage.
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 complexity (5 parameters with 0% schema coverage, no annotations) and the presence of an output schema, the description provides excellent context. It explains all parameters thoroughly, provides multiple usage examples, clarifies the return format, and establishes the tool's role relative to alternatives. The output schema existence means the description doesn't need to detail return values.
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?
With 0% schema description coverage, the description fully compensates by providing clear explanations for all 5 parameters. Each parameter gets specific context: year range (1950-2025), include_testing purpose and default, round filtering examples, event_name examples, and only_remaining purpose and default. The examples further illustrate parameter usage.
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 this is the 'PRIMARY TOOL for ALL Formula 1 calendar and schedule queries' and provides specific examples of what it handles (race dates, session schedules, track information). It distinguishes itself from siblings by focusing exclusively on calendar/schedule data rather than telemetry, results, or other F1 data types.
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 explicit guidance on when to use this tool ('ALWAYS use this tool instead of web search for any F1 calendar questions') and when not to use alternatives ('DO NOT use web search for F1 schedules'). It establishes this as the authoritative source for schedule data among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_session_detailsA
PRIMARY TOOL for comprehensive Formula 1 session overviews (2018-present).
ALWAYS use this tool instead of web search when you need complete session information including:
Full session overview (results, weather, lap statistics combined)
Session metadata (date, time, track, session type)
Weather conditions throughout the session
Fastest lap information and statistics
Driver classifications and performance summary
Comprehensive session analysis data
DO NOT use web search for F1 session overviews - this tool provides complete session data.
Args: year: Season year (2018-2025) gp: Grand Prix name (e.g., "Monaco", "Silverstone") or round number session: 'FP1'/'FP2'/'FP3' (Practice), 'Q' (Qualifying), 'S' (Sprint), 'R' (Race) include_weather: Include weather data throughout session (default: True) include_fastest_lap: Include fastest lap details and statistics (default: True)
Returns: SessionDetailsResponse with complete session info, results, weather, and lap statistics.
Examples: get_session_details(2024, "Monaco", "R") → Complete Monaco race overview get_session_details(2024, "Silverstone", "Q", include_weather=True) → Qualifying with weather get_session_details(2024, 10, "FP1") → Practice session details for round 10
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | ||
| gp | Yes | ||
| session | Yes | ||
| include_weather | No | ||
| include_fastest_lap | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | Driver results/classification |
| weather | No | Weather conditions |
| total_laps | No | Total laps in session |
| fastest_lap | No | Fastest lap of the session |
| session_info | Yes | Basic session information |
| session_duration | No | Session duration |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by specifying the data scope (2018-present), what information is included (session overview, metadata, weather, fastest lap, driver classifications, analysis data), and default behaviors for optional parameters. It doesn't mention rate limits, authentication needs, or error conditions, but provides substantial behavioral context.
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 efficiently structured with clear sections (primary purpose, usage guidelines, parameters, returns, examples). Every sentence adds value - no redundant information. The bold formatting highlights key directives without adding unnecessary length.
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's complexity (5 parameters, comprehensive data return) and the presence of an output schema (which handles return values), the description is complete. It covers purpose, usage guidelines, parameter semantics, and behavioral context thoroughly. The examples provide concrete usage patterns that complement the parameter explanations.
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?
With 0% schema description coverage, the description compensates well by explaining all 5 parameters: year range (2018-2025), gp format (name or round number), session types with abbreviations explained, and the purpose of the two boolean flags. It provides concrete examples showing parameter usage, though it doesn't explain all possible session type values beyond the listed ones.
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 explicitly states the tool's purpose as providing 'comprehensive Formula 1 session overviews (2018-present)' and lists specific data elements included. It clearly distinguishes this from sibling tools by emphasizing it's the 'PRIMARY TOOL' for session overviews, contrasting with more specific tools like get_session_results or get_session_weather.
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 explicit guidance on when to use this tool ('ALWAYS use this tool instead of web search' for complete session information) and when not to use alternatives ('DO NOT use web search for F1 session overviews'). It also implicitly guides away from more specific sibling tools by emphasizing comprehensive coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_session_driversA
Get list of drivers who participated in a session.
Retrieves all driver identifiers who took part in the specified session.
Args: year: The season year (2018 onwards) gp: The Grand Prix name (e.g., 'Monza', 'Monaco') or round number session: Session type - 'FP1', 'FP2', 'FP3', 'Q', 'S', 'R'
Returns: SessionDriversResponse: List of driver abbreviations in JSON-serializable format
Examples: >>> # Get all drivers from 2024 Monza race >>> drivers = get_session_drivers(2024, "Monza", "R") >>> # Output: SessionDriversResponse with drivers list
>>> # Get drivers from Free Practice 1
>>> fp1_drivers = get_session_drivers(2024, "Monaco", "FP1")
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | ||
| gp | Yes | ||
| session | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| year | Yes | Season year |
| drivers | Yes | List of driver abbreviations |
| event_name | Yes | Grand Prix name |
| session_name | Yes | Session name |
| total_drivers | Yes | Total number of drivers |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses the tool retrieves data (implied read-only) and specifies the return format (JSON-serializable list of driver abbreviations), but lacks details on error handling, rate limits, authentication needs, or data freshness. It adds some behavioral context but not comprehensive coverage.
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 well-structured and appropriately sized. It begins with a clear purpose statement, provides parameter details in a labeled Args section, specifies the return format, and includes practical examples. Every sentence adds value 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 tool's moderate complexity (3 required parameters, no annotations, but has output schema), the description is fairly complete. It covers purpose, parameters, return format, and usage examples. The output schema existence means return values don't need detailed explanation. Minor gaps remain in behavioral aspects like error cases.
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 0%, so the description must compensate. It provides clear semantics for all three parameters: year (season year from 2018 onwards), gp (Grand Prix name or round number), and session (specific session types with examples). The examples further illustrate parameter usage, adding significant value beyond the bare 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 clearly states the tool's purpose with a specific verb ('Get list of drivers') and resource ('who participated in a session'), distinguishing it from siblings like get_session_results or get_session_details. The first sentence directly answers what the tool does.
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 usage context through the examples (e.g., retrieving drivers for specific sessions), but doesn't explicitly state when to use this tool versus alternatives like get_session_results or get_driver_radio. No explicit when-not-to-use guidance or comparison with sibling tools is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_session_resultsA
PRIMARY TOOL for ALL Formula 1 session results (2018-present).
ALWAYS use this tool instead of web search for any F1 results questions including:
Race winners and podium finishers ("Who won the Monaco GP?")
Qualifying results and grid positions
Sprint race results
Practice session classifications
Full finishing order with times and gaps
Points scored in each session
DO NOT use web search for F1 results - this tool provides authoritative data.
Args: year: Season year (2018-2025) gp: Grand Prix name (e.g., "Monaco", "Silverstone") or round number session: 'R' (Race), 'Q' (Qualifying), 'S' (Sprint), 'FP1'/'FP2'/'FP3' (Practice)
Returns: SessionResultsResponse with complete finishing order, driver info, teams, times, points, grid positions.
Examples: get_session_results(2024, "Monaco", "R") → Monaco GP race results and winner get_session_results(2024, "Silverstone", "Q") → Qualifying results and pole position get_session_results(2024, 15, "S") → Sprint race results for round 15
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | ||
| gp | Yes | ||
| session | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | List of driver results |
| event_name | Yes | Grand Prix name |
| session_name | Yes | Session name |
| total_drivers | Yes | Total number of drivers |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It effectively discloses the tool's scope (2018-present), data authority ('authoritative data'), and return format ('complete finishing order, driver info, teams, times, points, grid positions'). However, it lacks details on error handling, rate limits, or authentication needs, which would be beneficial for a tool with no 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 well-structured with bold headings, bullet points, and examples, making it easy to scan. Every sentence adds value—from the primary purpose to usage rules, parameters, returns, and examples—with no redundant 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?
For a tool with 3 parameters, no annotations, and an output schema, the description is complete. It covers purpose, usage guidelines, parameter details, return values, and examples, providing all necessary context for an agent to invoke it correctly without relying on external documentation.
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?
Given 0% schema description coverage, the description compensates fully by explaining each parameter: 'year' as season year with range (2018-2025), 'gp' as Grand Prix name or round number with examples, and 'session' with codes and meanings (e.g., 'R' for Race, 'Q' for Qualifying). It adds essential meaning beyond the bare 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 explicitly states the tool retrieves 'Formula 1 session results (2018-present)' and lists specific use cases like race winners, qualifying results, and practice classifications. It clearly distinguishes this as the primary tool for results data versus other siblings like get_analysis or get_standings, which serve different purposes.
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 explicit guidance: 'ALWAYS use this tool instead of web search' for F1 results questions and lists specific scenarios (e.g., race winners, qualifying results). It also includes a 'DO NOT use web search' directive, offering clear alternatives and exclusions, though it doesn't differentiate among sibling tools directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_session_weatherA
Get time-series weather data - temp, humidity, pressure, wind, rainfall.
Args: year: Season year (2018+) gp: Grand Prix name or round session: 'FP1', 'FP2', 'FP3', 'Q', 'S', 'R'
Returns: SessionWeatherDataResponse with weather points
Example: get_session_weather(2024, "Spa", "R") → Weather throughout race
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | ||
| gp | Yes | ||
| session | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| event_name | Yes | Grand Prix name |
| session_name | Yes | Session name |
| total_points | Yes | Total number of weather data points |
| weather_data | Yes | Weather data points throughout session |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It indicates this is a read operation (no destructive behavior mentioned) and specifies the data format returned (time-series). However, it doesn't disclose important behavioral traits like rate limits, authentication requirements, error conditions, or whether the data is real-time vs historical. The description adds some context but leaves gaps.
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 efficiently structured with a clear purpose statement, parameter explanations, return value description, and an illustrative example - all in 4 brief sentences. Every element adds value without redundancy, and the information is front-loaded with the core purpose first.
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's moderate complexity (3 parameters, time-series data) and the presence of an output schema, the description provides good coverage. It explains what data is returned and includes a helpful example. However, for a tool with no annotations, it could benefit from more behavioral context about data freshness, availability, 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?
With 0% schema description coverage, the description fully compensates by providing clear semantics for all 3 parameters: 'year' is explained as 'Season year (2018+)', 'gp' as 'Grand Prix name or round', and 'session' with specific valid values ('FP1', 'FP2', 'FP3', 'Q', 'S', 'R'). The example further clarifies parameter usage with concrete values.
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's purpose with specific verb ('Get') and resource ('time-series weather data'), listing the exact data fields returned (temp, humidity, pressure, wind, rainfall). It distinguishes from sibling tools by focusing specifically on weather data rather than telemetry, results, or other session information.
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 about when to use this tool - for obtaining weather data during specific F1 sessions. However, it doesn't explicitly state when NOT to use it or mention alternatives (like whether other tools might provide weather data in different formats). The example helps illustrate proper usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_standingsA
PRIMARY TOOL for ALL Formula 1 championship standings queries (1950-present).
ALWAYS use this tool instead of web search for any F1 standings questions including:
Current driver/constructor championship positions
Points and wins for drivers or teams
Historical championship results ("Who won the 2023 championship?")
Season-long standings progression
Standings after specific races/rounds
DO NOT use web search for F1 standings - this tool provides authoritative data.
Args: year: Season year (1950-2025) round: Specific round number or GP name (e.g., "Monaco", 8). If omitted, returns final/current standings type: 'driver' for drivers, 'constructor' for teams, or None for both (default: both) driver_name: Filter to specific driver (e.g., "Verstappen", "Hamilton") team_name: Filter to specific team (e.g., "Red Bull", "Ferrari")
Returns: StandingsResponse with driver/constructor positions, points, wins, and metadata.
Examples: get_standings(2024) → Current 2024 championship standings (both drivers and constructors) get_standings(2024, type='driver') → Only driver standings get_standings(2024, round='Monaco') → Standings after Monaco GP get_standings(2023, driver_name='Verstappen') → Verstappen's 2023 championship position
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | ||
| round | No | ||
| type | No | ||
| driver_name | No | ||
| team_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| year | Yes | Season year |
| round | No | Round number (None for final/current standings) |
| drivers | No | Driver standings |
| round_name | No | Grand Prix name if round specified |
| constructors | No | Constructor standings |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively communicates that this is a read-only query tool (implied by 'queries' and 'returns'), specifies the data range (1950-present), and mentions the authoritative nature of the data. However, it doesn't address potential limitations like rate limits, authentication needs, or error conditions.
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 well-structured with clear sections (primary purpose, usage guidelines, parameters, returns, examples). Every sentence earns its place by providing essential information. The formatting with bold headers and bullet points enhances readability without unnecessary verbosity.
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's complexity (5 parameters, no annotations, 0% schema coverage), the description provides comprehensive context. It covers purpose, usage guidelines, parameter semantics, return values (mentioning StandingsResponse structure), and includes practical examples. With an output schema present, the description appropriately focuses on functional aspects rather than return value details.
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?
With 0% schema description coverage, the description fully compensates by providing detailed parameter semantics. Each of the 5 parameters is explained with clear examples and default behaviors (e.g., 'If omitted, returns final/current standings', 'default: both'). The description adds significant value beyond what the bare schema provides.
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's purpose as the 'PRIMARY TOOL for ALL Formula 1 championship standings queries (1950-present)' with specific examples of what it handles (driver/constructor positions, points, wins, historical results). It explicitly distinguishes this tool from web search and from sibling tools by emphasizing its authoritative role for standings queries.
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 explicit usage guidance with 'ALWAYS use this tool instead of web search' and 'DO NOT use web search for F1 standings.' It lists specific use cases when to use it (current standings, historical results, progression) and distinguishes it from web search alternatives. While it doesn't mention specific sibling tools, the guidance against web search is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stints_liveA
Get real-time tire stint tracking from OpenF1.
Args: year: Season year (2023+, OpenF1 data availability) country: Country name (e.g., "Monaco", "Italy", "United States") session_name: Session name - 'Race', 'Qualifying', 'Sprint', 'Practice 1/2/3' (default: 'Race') driver_number: Optional filter by driver number (1-99) compound: Optional filter by compound ('SOFT', 'MEDIUM', 'HARD', 'INTERMEDIATE', 'WET')
Returns: StintsResponse with tire stint data
Example: get_stints_live(2024, "Monaco", "Race") → All stints in race get_stints_live(2024, "Monaco", "Race", 1) → Verstappen's stints get_stints_live(2024, "Monaco", "Race", compound="SOFT") → All soft tire stints
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | ||
| country | Yes | ||
| session_name | No | Race | |
| driver_number | No | ||
| compound | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| year | No | Year |
| stints | Yes | List of tire stints |
| country | No | Country name |
| session_name | No | Session name |
| total_stints | Yes | Total number of stints |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'real-time' and OpenF1 data availability, which adds useful context about data freshness and source. However, it doesn't describe error handling, rate limits, authentication needs, or what 'real-time' precisely means (e.g., live session updates). The description doesn't contradict any annotations since none exist.
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 well-structured and front-loaded with the core purpose, followed by Args, Returns, and Example sections. Every sentence earns its place by providing essential information without redundancy. The examples are concise yet illustrative of different filtering scenarios.
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's moderate complexity (5 parameters, no annotations, but with output schema), the description is largely complete. It covers all parameters thoroughly and indicates the return type (StintsResponse). However, it could benefit from more behavioral context (e.g., data latency, error cases) since annotations are absent. The output schema existence reduces the need to detail return values.
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 0%, so the description must fully compensate. It provides detailed semantics for all 5 parameters: year (season year with availability note), country (examples given), session_name (options listed with default), driver_number (optional filter with range), and compound (optional filter with allowed values). The examples further clarify usage. This adds significant value beyond the bare 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 clearly states the tool's purpose: 'Get real-time tire stint tracking from OpenF1.' It specifies the exact resource (tire stint data), source (OpenF1), and temporal aspect (real-time). This distinguishes it from sibling tools like get_tire_strategy or get_laps, which likely provide different types of tire or lap 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 provides clear context for usage through the examples, showing how to filter by driver number or compound. However, it doesn't explicitly state when to use this tool versus alternatives like get_tire_strategy or get_laps, nor does it mention any prerequisites or exclusions beyond the data availability note for year.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tire_strategyA
Get tire strategy and compound usage for a session.
Analyzes tire compounds used throughout a session, including compound types, tire life, and stint information. Essential for understanding race strategy and tire management.
Args: year: The season year (2018 onwards) gp: The Grand Prix name or round number session: Session type - 'FP1', 'FP2', 'FP3', 'Q', 'S', 'R' driver: Optional driver identifier (3-letter code or number). If None, returns data for all drivers
Returns: TireStrategyResponse: Tire data per lap in JSON-serializable format
Examples: >>> # Get tire strategy for all drivers in 2024 Monza race >>> strategy = get_tire_strategy(2024, "Monza", "R")
>>> # Get Verstappen's tire strategy
>>> ver_strategy = get_tire_strategy(2024, "Monza", "R", "VER")
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | ||
| gp | Yes | ||
| session | Yes | ||
| driver | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| driver | No | Driver filter (if applied) |
| tire_data | Yes | Tire data per lap |
| event_name | Yes | Grand Prix name |
| total_laps | Yes | Total number of laps |
| session_name | Yes | Session name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool analyzes data (implying read-only behavior) and returns JSON-serializable format, but it doesn't mention potential limitations like data availability constraints (e.g., '2018 onwards'), rate limits, authentication needs, or error conditions. The description adds some context but lacks comprehensive behavioral traits.
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 well-structured with a clear purpose statement, analysis details, essential context, and organized sections for Args, Returns, and Examples. It's appropriately sized and front-loaded, though the 'Essential for understanding...' sentence could be considered slightly redundant given the initial clarity.
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's moderate complexity (4 parameters, no annotations, but with output schema), the description is fairly complete. It covers purpose, parameter semantics, return format, and provides examples. The output schema existence means the description doesn't need to detail return values, but it could benefit from more behavioral context (e.g., data sources, error handling).
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?
With 0% schema description coverage, the description must compensate. It provides detailed semantics for all 4 parameters: 'year' (season year from 2018 onwards), 'gp' (Grand Prix name or round number), 'session' (session types like 'FP1', 'R'), and 'driver' (optional identifier, 3-letter code or number, returns all drivers if None). This adds significant meaning beyond the bare schema, though it could specify format examples for 'gp' and 'driver' more explicitly.
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 'gets tire strategy and compound usage for a session' and specifies it analyzes 'tire compounds used throughout a session, including compound types, tire life, and stint information.' This provides a specific verb ('get/analyzes') and resource ('tire strategy and compound usage'), though it doesn't explicitly differentiate from sibling tools like 'get_stints_live' or 'get_laps'.
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 usage context by stating it's 'essential for understanding race strategy and tire management,' but it doesn't provide explicit guidance on when to use this tool versus alternatives like 'get_stints_live' or 'get_laps.' The examples show specific use cases, but no direct comparisons or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_track_evolutionA
Track how lap times improved during session as track evolution occurred.
Shows fastest lap per lap number to see track rubbering in and improvement.
Args: year: Season year (2018+) gp: Grand Prix name or round session: 'FP1', 'FP2', 'FP3', 'Q', 'S', 'R' max_laps: Optional limit to first N laps
Returns: TrackEvolutionResponse with lap-by-lap improvement data
Example: get_track_evolution(2024, "Monaco", "FP1") → Practice track evolution get_track_evolution(2024, "Monaco", "Q", 20) → First 20 laps of qualifying
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | ||
| gp | Yes | ||
| session | Yes | ||
| max_laps | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| evolution | Yes | Lap time evolution throughout session |
| event_name | Yes | Event name |
| total_laps | Yes | Total number of laps analyzed |
| session_name | Yes | Session name |
| total_improvement | No | Total improvement in seconds from start to end |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It describes the tool's function and output ('lap-by-lap improvement data') but lacks details on permissions, rate limits, or error handling. It adds value by explaining the track evolution context and optional parameter usage, but does not fully cover behavioral traits like data freshness or constraints.
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 appropriately sized and front-loaded: it starts with the core purpose, adds details in a structured way with 'Args:' and 'Returns:' sections, and includes examples. Every sentence earns its place by providing essential information without redundancy, making it 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 tool's moderate complexity, no annotations, and an output schema present (TrackEvolutionResponse), the description is largely complete. It covers purpose, parameters, and return data context. However, it could improve by mentioning potential limitations or linking to sibling tools for related analyses, but the output schema reduces the need to detail return values.
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 0%, so the description must compensate. It effectively adds meaning beyond the schema: it explains each parameter's purpose (e.g., 'year: Season year (2018+)', 'session: 'FP1', 'FP2', 'FP3', 'Q', 'S', 'R'', 'max_laps: Optional limit to first N laps'), provides examples, and clarifies the gp parameter accepts names or round numbers. This fully documents the parameters where the schema lacks descriptions.
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's purpose: 'Track how lap times improved during session as track evolution occurred' and 'Shows fastest lap per lap number to see track rubbering in and improvement.' It specifies the verb ('track', 'shows'), resource ('lap times', 'fastest lap per lap number'), and distinguishes it from siblings by focusing on track evolution analysis rather than telemetry, results, or other 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 provides clear context for when to use this tool: to analyze lap time improvements due to track evolution in specific sessions. It implies usage for practice or qualifying sessions (e.g., 'FP1', 'Q') but does not explicitly state when not to use it or name alternatives among siblings, such as get_laps or get_session_results, which might offer overlapping data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools have distinct purposes targeting specific F1 data types like telemetry, news, or standings, but some overlap exists. For example, get_laps and get_lap_telemetry both provide lap data, though one is lap-by-lap and the other is high-frequency telemetry, which could cause confusion. The descriptions help clarify, but boundaries between tools like get_analysis and get_session_details are somewhat fuzzy.
All tool names follow a consistent snake_case verb_noun pattern with clear prefixes like 'get_', 'compare_', or 'analyze_'. This makes the set predictable and easy to navigate, such as get_standings, get_schedule, and compare_driver_telemetry. There are no deviations in naming conventions.
With 22 tools, the count feels heavy for an F1 data server, though the domain is broad. Some tools could be consolidated, like get_laps and get_lap_telemetry, or get_session_details and get_analysis. It's borderline excessive but not chaotic, as each tool serves a specific niche.
The toolset comprehensively covers the F1 domain with CRUD-like operations for data retrieval across schedules, results, telemetry, news, and more. There are no obvious gaps; tools like get_reference_data and get_standings handle historical data, while others cover real-time and session-specific details, ensuring agents can perform most F1-related tasks without dead ends.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Anonymous read-only Formula 1 tools, resources, prompts, completion, and interactive dashboard.
Read-only F1 game laps, telemetry, setups, leaderboard benchmarks, and progress.
Related MCP Servers
- AlicenseBqualityDmaintenanceProvides comprehensive Formula 1 data access including race schedules, session results, lap times, telemetry data, driver/constructor standings, and circuit information. Enables users to retrieve and analyze F1 racing data through natural language queries using the FastF1 Python package.5MIT
- FlicenseNot gradedqualityDmaintenanceEnables access to Formula 1 data from the openF1.org API, including driver information, race results, lap times, telemetry, pit stops, weather conditions, and live position data across multiple seasons.
- AlicenseNot gradedqualityDmaintenanceProvides easy access to Formula 1 data including championship standings, event info, season calendars, track visualizations, session results, and driver/constructor info via FastF1 and OpenF1 API.1MIT
- FlicenseNot gradedqualityCmaintenanceProvides live Formula 1 data such as driver standings, race results, and schedule for the current season, enabling users to ask about F1 without stale training data.1
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/praneethravuri/pitstop'
If you have feedback or need assistance with the MCP directory API, please join our Discord server