Skip to main content
Glama
@racehooks/mcp

@racehooks/mcp

Official

@racehooks/mcp

MCP server for RaceHooks — gives AI assistants (Claude, Cursor, Windsurf) direct access to RaceHooks predictive models and analytics for motorsport — race intelligence delivered to your endpoint.

npm License: MIT

RaceHooks is an independent service and is not affiliated with or endorsed by Formula One Management or the FIA. "Formula 1," "F1," and related marks are trademarks of Formula One Licensing BV.

What this does

Exposes your RaceHooks account to an AI assistant as 58 tools, 7 resources, and 6 guided prompts. Every call is made with your account's credentials, so what a tool returns depends on your plan (Free, Developer, or Custom). The data tools cover motorsport (including Formula 1).

Tools

Live

Tool

What it does

Key args

Plan

get_live_session

Current session state: flag, lap, running order, intervals, tyres, race control messages. Empty when nothing is live.

—

All (Free gets the latest milestone classification instead of live timing)

list_events

Race weekends with session schedules and status.

year, upcoming, limit

All

Post-race insights

Tool

What it does

Key args

Plan

list_insight_races

Races with a completed post-race analytics bundle.

season

All

get_race_insights

Per-driver, per-lap model outputs (pit, safety car, overtake, undercut, tyre health, cliff risk, LTOE, win probability, expected points) plus pit stops, stints, and lap times.

raceId

All (Free gets tyre state only; strategic predictions need Developer+)

get_model_meta

Public model manifest: what each model predicts, model family, calibration tier, last trained.

—

All

get_session_analytics

Per-lap analytics snapshot for a session.

sessionId

Developer+

get_race_summary

Post-race analytics status and aggregate telemetry metrics.

raceId

All (aggregates need Developer+)

Races

Tool

What it does

Key args

Plan

get_race

Race details with results and qualifying grid.

raceId

All (timing fields need Developer+)

get_race_qualifying

Qualifying results.

raceId

All (Q1/Q2/Q3 times need Developer+)

get_race_pitstops

Pit stop records (driver, stop, lap, duration).

raceId

All

get_race_tyres

Tyre stints (compound, lap range, tyre age).

raceId

All

get_race_weather

Lap-by-lap weather.

raceId

All

get_race_laps

Per-lap times and positions.

raceId, driverId

Developer+

get_event_pace

Practice and qualifying pace summary per driver.

eventId

Developer+

History (drivers, constructors, circuits, seasons)

Tool

What it does

Key args

Plan

list_drivers

Drivers, searchable.

search, nationality, active, limit, offset

All (page size 25 on Free, 100 paid)

get_driver

Driver profile with career stats.

driverId

All

get_driver_results

Race-by-race results for a driver.

driverId, season

All (timing fields need Developer+)

get_driver_standings

Championship standings history for a driver.

driverId, season

All

list_constructors

Constructors.

lineage, active, limit, offset

All

get_constructor

Constructor profile with lineage history.

constructorId

All

get_constructor_results

Race-by-race results for a constructor.

constructorId, season

All (timing fields need Developer+)

get_constructor_standings

Championship standings history for a constructor.

constructorId, season

All

list_circuits

Circuits with location.

country, limit, offset

All

get_circuit

Circuit details and analytics.

circuitId

All

list_seasons

Seasons with race counts.

—

All

get_season_standings

Final driver and constructor standings for a season.

year

All

get_season_races

Races in a season.

year

All

Telemetry

Tool

What it does

Key args

Plan

get_telemetry_laps

Per-lap telemetry aggregates (speed, throttle, brake, DRS, aggression).

raceId, driverId, lapNumber

Developer+

get_telemetry_driver_laps

Per-lap telemetry for one driver.

raceId, driverId

Developer+

get_telemetry_lap_comparison

Every driver's telemetry for one lap.

raceId, lapNumber

Developer+

get_telemetry_race_summary

Race-level telemetry summary.

raceId

Developer+

get_race_telemetry_laps

Per-lap telemetry metrics from the race data API.

raceId, driverId

Developer+

get_race_telemetry_stints

Per-stint telemetry and degradation slopes.

raceId, driverId

Custom

get_race_telemetry_aggression

Driver aggression index rankings.

raceId

Custom

Fantasy

Tool

What it does

Key args

Plan

get_fantasy_scores

Estimated F1 Fantasy points per driver with full breakdown.

raceId

Developer+

get_fantasy_pit_times

Pit-stop time leaderboard (stationary time) for a session.

sessionId

Developer+

Account, usage and webhooks

Tool

What it does

Key args

Plan

list_feeds

Feed catalog with the plan each feed requires.

limit

All

list_webhooks

Webhook subscriptions on the account.

limit, offset

All

get_webhook

One webhook by ID.

webhookId

All

create_webhook

Create a webhook; returns the signing secret once.

feedId, webhookUrl, webhookMethod, filters

All

update_webhook

Change URL, method, or filters; pause/resume with active.

webhookId, webhookUrl, filters, active

All

delete_webhook

Delete a webhook.

webhookId

All

test_webhook

Send a test payload now.

webhookId

All

get_webhook_logs

Recent delivery logs.

webhookId, limit

All

get_webhook_secret

Current signing secret.

webhookId

All

rotate_webhook_secret

Rotate the signing secret (old one stops working immediately).

webhookId

All

get_subscription

Tier, plan limits, and usage snapshot.

—

All

get_usage

Deliveries and failures this period, remaining bucket.

—

All

get_usage_by_feed

Deliveries by feed this period.

—

All

get_usage_latency

Delivery latency percentiles by feed.

—

All

get_usage_hourly

Hourly deliveries for the last 24 hours.

—

All

get_usage_history

Delivery history across past periods.

—

All

get_billing_plan

Current plan, limits, usage this period, and billing period dates.

—

All

Session replay

Tool

What it does

Key args

Plan

list_replay_sessions

Recorded sessions that can be replayed.

year, type, limit, offset

All (Free and Developer: current season only)

get_demo_session

The curated demo session to replay.

—

All

get_replay_quota

Replay delivery quota (distinct-session slots) for your tier.

—

All

prepare_replay

Prepare a session's playback artifact.

sessionId

All

get_replay_status

Whether a session's playback artifact is ready.

sessionId

All

Resources (read-only context)

  • racehooks://feeds — full feed catalog

  • racehooks://live — current live session state

  • racehooks://webhooks — all webhook subscriptions

  • racehooks://usage — current delivery usage

  • racehooks://drivers — current-season driver roster

  • racehooks://circuits — circuits with location

  • racehooks://seasons — seasons with race counts

Prompts (guided workflows)

  • setup_race_event_webhook — create an events.race subscription with filters

  • setup_fantasy_scoring_webhook — create a fantasy-optimised subscription

  • check_account_health — full account health summary

  • analyze_race_strategy — pit strategy, tyre management, and model predictions for one race

  • compare_drivers — two drivers head-to-head across a race

  • explain_ml_predictions — what the models predicted vs what happened in the latest analysed race

Related MCP server: iRacing MCP Server

Installation

npm install -g @racehooks/mcp

Or run directly with npx:

npx @racehooks/mcp

Get your API credentials at racehooks.io.

Use of RaceHooks through this MCP server is subject to the RaceHooks Terms of Service and Privacy Policy. Model outputs are probabilistic estimates, not statements of fact.

Configuration

Two environment variables are required; the server exits on start-up without them:

export RACEHOOKS_CLIENT_ID="your-client-id"
export RACEHOOKS_CLIENT_SECRET="your-client-secret"
# Optional — defaults to https://api.racehooks.io
export RACEHOOKS_BASE_URL="https://api.racehooks.io"

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "racehooks": {
      "command": "npx",
      "args": ["-y", "@racehooks/mcp"],
      "env": {
        "RACEHOOKS_CLIENT_ID": "your-client-id",
        "RACEHOOKS_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}

Claude Code

Claude Code does not read MCP servers from .claude/settings.json. Add the server with the CLI:

claude mcp add racehooks \
  -e RACEHOOKS_CLIENT_ID=your-client-id \
  -e RACEHOOKS_CLIENT_SECRET=your-client-secret \
  -- npx -y @racehooks/mcp

Add --scope project to write it to a shared .mcp.json in your project, or --scope user to make it available in every project. To check the file in without committing secrets, reference environment variables in .mcp.json:

{
  "mcpServers": {
    "racehooks": {
      "command": "npx",
      "args": ["-y", "@racehooks/mcp"],
      "env": {
        "RACEHOOKS_CLIENT_ID": "${RACEHOOKS_CLIENT_ID}",
        "RACEHOOKS_CLIENT_SECRET": "${RACEHOOKS_CLIENT_SECRET}"
      }
    }
  }
}

Cursor / Windsurf

Add to your MCP config (.cursor/mcp.json or equivalent):

{
  "mcpServers": {
    "racehooks": {
      "command": "npx",
      "args": ["-y", "@racehooks/mcp"],
      "env": {
        "RACEHOOKS_CLIENT_ID": "your-client-id",
        "RACEHOOKS_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}

Cline

In Cline, open MCP Servers → Installed → Configure MCP Servers and add to cline_mcp_settings.json:

{
  "mcpServers": {
    "racehooks": {
      "command": "npx",
      "args": ["-y", "@racehooks/mcp"],
      "env": {
        "RACEHOOKS_CLIENT_ID": "your-client-id",
        "RACEHOOKS_CLIENT_SECRET": "your-client-secret"
      },
      "disabled": false
    }
  }
}

Example usage with Claude

Once configured, you can ask Claude things like:

"Check my RaceHooks account health"

"Create an events.race webhook for https://myapp.com/hook, filtering for Ferrari only"

"Compare VER and NOR tyre degradation in the last race"

"Show me which feeds are using the most delivery quota today"

"Set up a fantasy scoring webhook for my VER, NOR, LEC team at https://scoring.myapp.com/hook"

Security

The MCP server runs as a local stdio process — it never binds a network port. Your credentials are passed via environment variables, are sent only to the RaceHooks API (to obtain an access token), and are never included in tool calls or resource URIs.

All API calls are authenticated using OAuth 2 client credentials (token auto-refreshes before expiry).

Available Tools

58 tools
create_webhookCreate WebhookA

Register a new webhook subscription. Returns the webhook and the HMAC signing secret (shown once — store it immediately).

NameRequiredDescriptionDefault
feedIdYesFeed ID from list_feeds. Use 'events.race' for structured race events.
filtersNo
webhookUrlYesPublic HTTPS URL to deliver payloads to.
webhookMethodNopost

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare that this is a non-read-only, non-idempotent, open-world operation that is not destructive. The description adds a critical behavioral detail beyond the annotations: it returns the webhook and an HMAC signing secret that is shown only once and must be stored immediately.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no wasted text. The creation purpose is front-loaded, and the one-time secret warning follows immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a webhook-creation mutation with nested filter parameters and no output schema, the description covers the core action and the most important return-value caveat: the one-time HMAC secret. It is not fully complete because it omits parameter guidance and does not clarify alternatives, but the critical operational detail is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description provides no information about the four parameters. With only 50% schema description coverage, important inputs such as filters and webhookMethod remain under-explained, and the description does nothing to compensate for that gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Register a new webhook subscription.' This clearly distinguishes creation from sibling operations such as update_webhook, delete_webhook, and test_webhook.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is the creation path for a new webhook, but it does not explicitly say when to use it versus update_webhook or how it relates to list_webhooks/get_webhook. The usage context is therefore implied rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_webhookDelete WebhookB
DestructiveIdempotent

Permanently delete a webhook subscription.

NameRequiredDescriptionDefault
webhookIdYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so safety is structured-covered; "Permanently" restates rather than extends that. The description does not say what else is destroyed (secret, logs, delivery history) or whether errors occur for a nonexistent webhookId.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler, which is appropriate for a one-parameter tool. It is arguably too terse given the destructive nature, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-param destructive tool with rich annotations and no output schema, the essentials are covered. Missing: what state remains after deletion, whether webhook logs/secret survive, and whether the call is safe to retry on already-deleted ids (idempotentHint implies yes but isn't explained).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter webhookId has 0% schema description coverage, and the description never mentions it — no format, no source (e.g., from list_webhooks), no error behavior for invalid ids. The description wholly fails to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("delete a webhook subscription") with the permanence qualifier, so the agent knows exactly what it does. It does not differentiate from siblings like update_webhook or test_webhook, but the operation is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus update_webhook (which could disable a webhook non-destructively) or test_webhook. There are no exclusions, prerequisites, or confirmation guidance despite this being a destructive operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_billing_planGet Billing PlanA
Read-onlyIdempotent

Get the detailed billing plan including tier, subscription period end date, limits, and current usage.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, so the safety profile is covered. The description adds meaningful context by listing exactly what the response contains, which matters since there is no output schema. It does not cover auth requirements or rate limits, but the annotation baseline lowers that burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. Every listed field earns its place by describing the return value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-argument, read-only tool with full annotation coverage and no output schema, the description is largely complete: it states purpose and return contents. It lacks sibling disambiguation and any caveats (e.g., whether a plan must exist), keeping it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there is nothing for the description to disambiguate. Baseline score for zero-param tools applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource (get the billing plan) and enumerates the fields returned: tier, subscription period end, limits, and current usage. It does not distinguish this from sibling tools like get_subscription or get_usage, which likely overlap.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no indication of when to use this tool versus get_subscription or get_usage, no alternatives named, and no exclusions. The only guidance is implied by the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_circuitGet CircuitA
Read-onlyIdempotent

Get circuit details and analytics (compound priors, historical pace data). Available on every plan.

NameRequiredDescriptionDefault
circuitIdYesCircuit slug, e.g. 'monaco'.

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the description only needed to add value — and it does by disclosing the two data categories returned and that no plan gating applies. It stops short of describing response shape or size, but with no output schema that is the main remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the payload description front-loaded; nothing is buried. 'Available on every plan' is slightly marketing-flavored but does carry entitlement information, so it earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read-only lookup with full schema coverage and no output schema, the description covers purpose, payload contents, and availability. The one material omission is how it relates to list_circuits, which an agent would need in order to choose correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter already carries an example slug ('monaco'), so the schema does the heavy lifting. The description adds nothing about the identifier format or lookup behavior, which is acceptable at this coverage level but not more than baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource (get_circuit) and adds what the payload actually contains: compound priors and historical pace data. It does not explicitly distinguish itself from the sibling list_circuits, but 'details' versus a listing is a reasonable inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only usage-adjacent statement is 'Available on every plan,' which is a tier/entitlement fact, not guidance on when to call this versus list_circuits or get_event_pace. No exclusions or alternatives are named, so the agent must infer the use case from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_constructorGet ConstructorB
Read-onlyIdempotent

Get a constructor profile including its lineage history (predecessor and successor teams). Available on every plan.

NameRequiredDescriptionDefault
constructorIdYesConstructor slug, e.g. 'red_bull'.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered. The description adds only the plan-availability note and a hint about lineage content; it says nothing about error behavior for unknown slugs or what the profile contains beyond lineage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero filler, and the payload-relevant detail (lineage history) is front-loaded ahead of the plan note.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does state the main return content (profile plus predecessor/successor teams), which is enough for a single-parameter read tool whose annotations already cover the safety profile. Minor gaps remain around error cases and any partial-data behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single required parameter with 100% schema description coverage, including a concrete example ('red_bull'), so the schema carries the full burden. The description adds nothing about the constructorId format or slug conventions, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Get a constructor profile') and further scopes it to lineage history of predecessor and successor teams, which distinguishes it from the aggregate siblings like get_constructor_results and get_constructor_standings. It does not explicitly name list_constructors as the alternative, so it falls just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only guidance offered is 'Available on every plan,' which is a plan-availability fact rather than a when-to-use rule. Nothing tells the agent when to prefer this over list_constructors or get_constructor_standings, and no prerequisites or exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_constructor_resultsGet Constructor ResultsC
Read-onlyIdempotent

Get race-by-race results for a constructor. Available on every plan; timing fields (gap, finish time) are only returned on Developer and above.

NameRequiredDescriptionDefault
limitNo
offsetNo
seasonNo
constructorIdYes

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive behavior. The description adds useful plan-gating context and notes that timing fields are restricted to Developer and above, but it does not describe pagination or the result format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core purpose and followed by a relevant availability caveat. There is no wasted wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With four undocumented parameters and no output schema, the description should do more to explain filtering, pagination, and result shape. It covers plan gating but leaves major operational details unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across four parameters. The description mentions results for a constructor but does not explain constructorId format, season filtering, limit, or offset, so it does not compensate for the missing schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: get race-by-race results for a constructor. This clearly distinguishes it from constructor metadata or standings tools, though it does not explicitly name sibling alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides plan availability and timing-field restrictions, but gives no guidance on when to use this tool versus alternatives such as get_constructor_standings or get_driver_results. The usage context is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_constructor_standingsGet Constructor StandingsB
Read-onlyIdempotent

Get championship standings history for a constructor across seasons. Available on every plan.

NameRequiredDescriptionDefault
seasonNo
constructorIdYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare read-only, idempotent, open-world, and non-destructive behavior, so the safety profile is covered. The description adds that it returns history across seasons and is available on every plan, but it does not explain pagination, data volume, or return characteristics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences, with the core purpose front-loaded. The availability sentence is brief and adds relevant context without unnecessary exposition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool, the description identifies the resource and plan availability, and annotations cover the safety profile. However, with 0% schema description coverage and no output schema, it leaves important parameter behavior such as the optional season default unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description needs to compensate for both parameters. It implies constructorId and season semantics with 'for a constructor' and 'across seasons,' but it does not state constructorId format, season format, or what happens when season is omitted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: getting championship standings history for a constructor across seasons. This clearly identifies the tool's scope, though it does not explicitly contrast it with nearby siblings such as get_driver_standings or get_season_standings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives like get_driver_standings, get_season_standings, or get_constructor_results. The only contextual note is plan availability, which does not help an agent choose between tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_demo_sessionGet Demo SessionA
Read-onlyIdempotent

Get the curated demo session to replay (the canonical ID of a guaranteed-real event).

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety and repeatability are covered structurally. The description adds real value with "canonical" and "guaranteed-real," telling the agent the result is stable and non-synthetic — but it says nothing about failure modes (e.g., whether the demo can be unavailable) or what the payload looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with the identifying detail (curated demo session) front-loaded and the disambiguating parenthetical immediately after. No filler, no repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-arg, annotation-covered lookup with no output schema, the description is close to sufficient: it says what is returned (a canonical ID) and that the underlying event is real. It stops short of saying whether the ID is meant to be passed into prepare_replay, which would fully close the loop.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is no parameter semantics to explain; the baseline applies. The description correctly does not invent inputs, though it also doesn't note that the call is argument-free and safe to call blindly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ("Get the curated demo session") plus a clarifying parenthetical that it returns "the canonical ID of a guaranteed-real event," which separates it from the real-session tools like get_live_session. It never names a sibling directly, so differentiation is by implication rather than explicit routing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase "to replay" hints that this feeds into the replay pipeline (prepare_replay), and "curated demo" implies a sandbox/onboarding use case rather than production data. However, there is no explicit statement of when to pick this over list_replay_sessions or get_live_session, and no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_driverGet DriverA
Read-onlyIdempotent

Get a driver profile with career statistics (wins, podiums, poles, championships). Available on every plan.

NameRequiredDescriptionDefault
driverIdYesDriver slug, e.g. 'max_verstappen'.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds plan availability and the scope of returned statistics, but does not mention not-found behavior or any other runtime detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short clauses with zero waste. The core purpose is front-loaded and the plan note is brief and secondary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple single-parameter read tool with rich annotations and a fully documented parameter. The description does well to name the returned fields, though it could note what happens for an unknown driver slug.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the driverId parameter is fully documented in the schema, including its slug format example. The description adds no parameter-level meaning beyond what the schema already provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a clear verb and resource ('Get a driver profile') and specifies the returned content (career statistics: wins, podiums, poles, championships). It is distinguishable from list_drivers and get_driver_results by focusing on a single profile, though it does not explicitly name those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'driver profile with career statistics', but there is no explicit guidance on when to choose this over get_driver_results, get_driver_standings, or list_drivers. 'Available on every plan' is access information, not selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_driver_resultsGet Driver ResultsA
Read-onlyIdempotent

Get race-by-race results for a driver. Available on every plan; timing fields (gap, finish time) are only returned on Developer and above.

NameRequiredDescriptionDefault
limitNo
offsetNo
seasonNoFilter to a specific season year, e.g. 2026.
driverIdYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the added value is the plan-gating disclosure: timing fields (gap, finish time) only appear on Developer and above, and the tool itself works on every plan. That is a genuinely useful, non-obvious behavioral trait. It omits pagination behavior despite limit/offset parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core purpose followed by the plan-tier caveat. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema and low parameter documentation, so the description should carry more: result ordering, default and max page size, and whether results span all seasons by default are all unstated. The plan-tier information is a good addition but doesn't close the gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25% — only 'season' is documented in the schema. The description says nothing about driverId, limit/offset paging, or how season interacts with the race-by-race listing, leaving three of four parameters unexplained in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get race-by-race results for a driver'), which clearly separates it from standings/aggregate siblings like get_driver_standings or get_constructor_results. It does not name an alternative explicitly, so it stops short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'race-by-race results' implies per-race granularity versus aggregate tools, but there is no explicit when-to-use/when-not guidance and no named alternative among the many sibling tools. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_driver_standingsGet Driver StandingsB
Read-onlyIdempotent

Get championship standings history for a driver across seasons. Available on every plan.

NameRequiredDescriptionDefault
seasonNoFilter to a specific season year.
driverIdYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds useful plan-availability context ('Available on every plan') but does not explain return shape, pagination, or whether omitting season returns all seasons. With annotations doing most of the work, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, and the core purpose is front-loaded. The plan-availability note is secondary and compact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with rich annotations, this is close to adequate, but the required driverId format and the behavior when season is omitted are left vague. With no output schema, the description could better clarify what the standings history contains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: season is documented in the schema, while the required driverId has no schema description. The description implies driverId is used to select a driver and that season can be omitted to get history across seasons, but it adds no format or identifier semantics for driverId. Baseline 3 is reasonable given partial schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Get championship standings history for a driver across seasons.' This distinguishes it from constructor standings by naming the driver scope and from season standings by emphasizing history across seasons. It does not explicitly name sibling alternatives, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only guidance is 'Available on every plan,' which is plan availability rather than when to use this tool versus siblings like get_season_standings or get_driver_results. There are no explicit when/when-not conditions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_event_paceGet Event PaceB
Read-onlyIdempotent

Get practice and qualifying pace summary per driver for an event. Requires Developer or higher.

NameRequiredDescriptionDefault
eventIdYesEvent ID from list_events.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds the auth-tier requirement ('Developer or higher'), which is genuine value beyond annotations, but it says nothing about what 'pace' means (best lap, average, sectors) or how the summary is scoped/returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core purpose and followed by the access constraint; nothing is padded. It could be marginally tighter, but there is no wasted content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool this is nearly sufficient, but with no output schema the description does not clarify what the 'pace summary' contains (fields, per-session breakdown, aggregation level). That ambiguity is the main remaining gap for an agent deciding whether this tool answers its question.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With one parameter and 100% schema description coverage, the schema already documents eventId and even cross-references list_events as its source. The description adds no further parameter meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Get practice and qualifying pace summary per driver for an event'), which is clearly more specific than the bare title. It implicitly distinguishes itself from results-oriented siblings like get_race_qualifying by emphasizing a per-driver 'pace summary', but it never names or contrasts with any sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Requires Developer or higher' gives a real prerequisite, which is useful. However, there is no explicit when-to-use guidance versus nearby tools such as get_race_qualifying, get_session_analytics, or get_telemetry_race_summary, so the agent must infer the choice from the phrase 'practice and qualifying pace'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_fantasy_pit_timesGet Fantasy Pit TimesA
Read-onlyIdempotent

Get the pit-stop time leaderboard for a session: stationary time (seconds stopped in the box) per stop, with driver code and team. Requires Developer or higher.

NameRequiredDescriptionDefault
sessionIdYesSession ID from list_events (e.g. a race session).

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely new context: the access tier requirement and the shape of the returned data (stationary seconds per stop, driver code, team) — valuable since there is no output schema. Pagination and error behavior remain unstated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the core output definition front-loaded and the prerequisite trailing. Nothing is repeated from the title or annotations beyond the necessary resource name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, single-parameter tool with full schema coverage, the description supplies what structured fields cannot: the exact meaning of the returned time metric and the authorization tier. Only the ambiguity versus get_race_pitstops keeps it from being fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With a single parameter at 100% schema description coverage, the schema already explains that sessionId comes from list_events and can be a race session. The description adds no format, syntax, or constraint detail beyond that, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('get the pit-stop time leaderboard for a session') and even defines the metric precisely as 'stationary time (seconds stopped in the box) per stop', which is far more informative than the name alone. It does not, however, distinguish itself from the sibling get_race_pitstops, so an agent must infer which pit-related tool to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Requires Developer or higher' clause gives a useful access prerequisite, but there is no explicit when-to-use guidance, no exclusion of alternatives, and no statement of when get_race_pitstops would be preferred instead. Usage is implied by the topic rather than directed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_fantasy_scoresGet Fantasy ScoresA
Read-onlyIdempotent

Get estimated F1 Fantasy points per driver for a completed race. Includes full scoring breakdown: race position points, qualifying points, Q2/Q3 bonuses, positions gained, fastest lap, beat-teammate bonuses, and DNF penalty. Requires Developer or higher.

NameRequiredDescriptionDefault
raceIdYesRace ID slug, e.g. '2026-bahrain-r1'.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds value beyond that with the authorization tier requirement and a concrete enumeration of the returned scoring components (position, qualifying, Q2/Q3 bonuses, fastest lap, DNF penalty), which is exactly the kind of context annotations can't convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, all front-loaded: purpose first, then detailed breakdown, then the access constraint. Every clause adds information and nothing repeats the name or title verbatim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully compensates by listing the scoring categories a caller will receive, and it discloses the tier requirement. Minor gaps remain: it doesn't state the response shape (per-driver list/aggregate) or behavior for incomplete races, but overall an agent has enough to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter (raceId) and the schema documents it fully at 100% coverage, including a concrete slug example. The description adds nothing about the raceId format itself, so the baseline 3 applies since the schema carries the load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Get estimated F1 Fantasy points per driver for a completed race,' and enumerates what the scoring breakdown contains. It clearly separates itself from analytics/telemetry siblings, though it doesn't explicitly contrast with the one adjacent fantasy tool, get_fantasy_pit_times.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'for a completed race' implies the usage precondition (finished sessions only) and the access tier note ('Requires Developer or higher') is a real prerequisite. However, no alternative tool or when-not-to-use case is named, so routing is left partly to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_live_sessionGet Live SessionA
Read-onlyIdempotent

Get the current live session state: flag status, lap number, driver positions, intervals, tyre compounds, and recent race control messages. Returns an empty/inactive context when no session is live. Live per-driver timing requires Developer or higher; Free receives the latest milestone classification (end of a qualifying segment or the final result) instead.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds real behavioral detail beyond that: the empty/inactive return contract and the tier-based degradation (Developer+ gets live per-driver timing, Free gets only the latest milestone classification) — exactly the kind of gating an agent must anticipate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the verb and payload, followed by the empty-state contract and the tier caveat. No filler, though the field enumeration and tier sentence are dense enough that the return-shape detail could be slightly more scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of describing the return payload and does so by listing the key fields, the empty-state behavior, and the entitlement-dependent variation. It is nearly complete for an agent's needs; only the exact shape/format of the returned context is left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. The description correctly does not invent parameter discussion, instead spending its words on return semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Get the current live session state") and enumerates the payload contents (flag status, lap number, driver positions, intervals, tyre compounds, race control messages). This clearly separates it from siblings like get_demo_session, list_replay_sessions, and get_session_analytics without requiring schema inspection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear usage context: it is for the *current* live session, and the "Returns an empty/inactive context when no session is live" line tells the agent how to interpret a null result rather than retrying. It does not name an explicit alternative for historical/replay data, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_model_metaGet Model MetaA
Read-onlyIdempotent

Get the public model manifest for each RaceHooks predictive model: what it predicts, its model family, a qualitative calibration tier, when it was last trained, and a changelog. Raw evaluation metrics are not exposed. Available on every plan.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds value beyond them by pre-empting a wrong expectation ('raw evaluation metrics are not exposed') and clarifying plan availability, which is real access-related context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence naming the resource and its fields, followed by two short qualifiers that each carry new information. There is no filler, though the enumerated field list is slightly dense for a single sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no parameters, the description must carry the return-shape burden, and it does so by listing the manifest's contents and explicitly excluding raw metrics. Nothing essential for correct invocation is missing, though it does not say whether it returns all models at once or a single manifest.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing to document and the baseline of 4 applies. The description does not need to explain argument semantics at all.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the public model manifest') and enumerates the returned fields — what it predicts, model family, calibration tier, last trained, changelog. That makes the tool's scope unmistakable. No sibling is named as a contrast, but no sibling in the list covers model metadata, so there is nothing to disambiguate from.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implicitly says when to call it (to learn about the predictive models rather than the underlying data), and adds two useful constraints: raw evaluation metrics are not exposed and it is available on every plan. However, it never states when to prefer this over, say, get_race_insights or get_fantasy_scores, nor any prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_raceGet RaceA
Read-onlyIdempotent

Get race details with full results and qualifying grid. Available on every plan; timing fields (gaps, fastest lap, finish time, Q1/Q2/Q3 times) are only returned on Developer and above.

NameRequiredDescriptionDefault
raceIdYesRace ID slug, e.g. '2026-bahrain-r1'.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly, idempotent, non-destructive, open-world behavior, so the safety profile is covered. The description adds genuinely non-obvious behavioral context beyond that: a tier-based partial-response rule where timing fields (gaps, fastest lap, finish time, Q1/Q2/Q3) are omitted below Developer. It does not discuss response shape or errors, which keeps it below a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, with the capability statement front-loaded and the plan constraint second. Every clause carries information an agent would otherwise have to discover through failure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read with no output schema, the description covers purpose, payload scope, and the one surprise (tier-gated timing fields). The notable gap is that it never positions itself against the dense race-scoped sibling set, which is the main ambiguity an agent faces here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single raceId parameter is documented in-schema with a format example ('2026-bahrain-r1'), so the schema carries the burden. The description adds nothing about the identifier beyond what the schema says, which is acceptable at this coverage level.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Get race details') and scopes the payload ('full results and qualifying grid'), so an agent knows roughly what comes back. It stops short of distinguishing itself from close siblings such as get_race_summary or get_race_qualifying, whose surfaces overlap with 'full results and qualifying grid'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The plan-tier sentence ('available on every plan; timing fields ... only on Developer and above') gives real eligibility guidance for calling it. However, there is no statement of when to prefer this over get_race_summary, get_race_qualifying, or get_race_laps, so routing among a crowded sibling set is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_race_insightsGet Race InsightsA
Read-onlyIdempotent

Get the full post-race ML analytics bundle for a race. Includes per-driver per-lap outputs: pit stop probability, safety car probability, overtake probability, undercut probability, tyre health, cliff risk and lap prediction, fuel-corrected lap time (LTOE), win probability, expected championship points. Also includes pit stops, tyre stints, lap times, and safety-car lap list. Output depends on plan: Free receives the descriptive data plus tyre state only (compound, tyre life, tyre health); the strategic predictions require Developer or higher.

NameRequiredDescriptionDefault
raceIdYesRace ID slug, e.g. '2026-bahrain-r1'.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent and openWorld, so the safety profile is covered. The description adds genuinely non-obvious behaviour: the response is plan-dependent, with free tiers receiving only descriptive data plus tyre state while strategic predictions require Developer or higher. Missing are cost/latency or error behaviour on invalid race IDs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the bundle summary, then the output inventory, then the plan constraint last. The long enumeration of metrics is dense but each item is substantive for a tool with no output schema; the two-part 'also includes' clause is slightly redundant but not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-value burden and does so thoroughly, listing every metric category plus the auxiliary datasets. The plan-tier caveat is essential and included; only the boundary to overlapping race/session tools remains unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter and schema coverage is 100%, so the schema already documents raceId including the slug example. The description adds nothing about the ID format or validity, so it sits at the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the full post-race ML analytics bundle for a race') and enumerates the exact artefacts returned. It does not name which sibling to use instead (e.g. get_race_summary or get_session_analytics), so an agent must infer the boundary itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'post-race' and the plan-tier note, but there is no explicit when-to-use/when-not guidance and no routing against the many adjacent race endpoints in the sibling list. The plan gating is the only conditional context offered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_race_lapsGet Race LapsA
Read-onlyIdempotent

Get per-lap times and positions for a race. Requires Developer or higher. Optionally filter to a single driver with driverId.

NameRequiredDescriptionDefault
raceIdYes
driverIdNoFilter to a specific driver, e.g. 'max_verstappen'.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive, and open-world behavior. The description adds useful auth context with 'Requires Developer or higher,' but does not mention rate limits, return pagination, or other 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two compact sentences and front-loads the core purpose. Every sentence adds useful information without repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read tool with rich annotations, this is nearly complete: it states the returned data type, filtering option, and permission requirement. Minor gaps remain around raceId format and expected response shape, but no output schema exists to rely on instead.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%: driverId is documented in the schema with an example, and the description reinforces that it is an optional single-driver filter. raceId is required by the schema but its format or naming convention is not explained in either place.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: get per-lap times and positions for a race. It is clear what the tool returns, but it does not explicitly distinguish itself from nearby siblings such as get_race_telemetry_laps or get_telemetry_driver_laps.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives the permission prerequisite (Developer or higher) and notes the optional driver filter, which implies typical usage. However, it does not say when to use this instead of related lap/telemetry tools, so an agent must infer the boundary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_race_pitstopsGet Race PitstopsB
Read-onlyIdempotent

Get all pit stop records for a race (driver, stop number, lap, duration). Available on every plan.

NameRequiredDescriptionDefault
raceIdYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, and open-world behavior, so the safety profile is covered. The description adds one piece of context beyond that: the tool is available on every plan (an access/entitlement constraint). It says nothing about behavior for races with no pit data, pagination, 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core purpose and the returned fields, with no filler. Every clause carries information the agent can use.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the field enumeration partially compensates by naming the return shape, but types and units (e.g., whether duration is milliseconds or a string) are absent. The raceId origin and behavior on races lacking pit data remain unexplained, leaving real gaps for a data-fetch tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the single required parameter raceId is undocumented anywhere — no format, no source (e.g., from get_race or list_events), no example. The description must compensate here and does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (get all pit stop records for a race) and enumerates the fields returned (driver, stop number, lap, duration), so the agent knows exactly what comes back. It does not explicitly distinguish itself from adjacent siblings such as get_race_laps or get_fantasy_pit_times, but the resource is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only usage-adjacent sentence is 'Available on every plan', which is a plan-availability fact, not when-to-use guidance. There is no statement of when to prefer this over get_race_laps, get_race_tyres, or get_fantasy_pit_times, and no prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_race_qualifyingGet Race QualifyingA
Read-onlyIdempotent

Get qualifying results for a race. Available on every plan; Q1/Q2/Q3 times are only returned on Developer and above.

NameRequiredDescriptionDefault
raceIdYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds a genuinely non-structured behavioral detail: Q1/Q2/Q3 segment times are only returned for Developer plans and above, which affects result shape — useful for an agent interpreting an empty segment. Return payload structure is still not described.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core purpose and followed by the plan-related caveat. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description should indicate what comes back; it alludes to qualifying results and segment times but not the shape (position, driver, lap times). For a simple single-parameter read tool this is adequate but leaves real gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the single parameter raceId carries no description or format constraint (only minLength 1). The description says nothing about whether raceId is a round number, an internal ID, or a slug, so it fails to compensate for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (get) and resource (qualifying results for a race), which clearly separates it from siblings like get_race, get_race_laps, or get_race_summary. It does not explicitly name a sibling to contrast with, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives plan-availability context ('available on every plan'), which implies when the tool can be used, but it never says when an agent should prefer this over get_race_summary or get_race, nor any prerequisites beyond plan tier.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_race_summaryGet Race SummaryA
Read-onlyIdempotent

Get the post-race analytics status and aggregate telemetry metrics for a race. Status is available on every plan; the aggregate metrics are only returned on Developer and above.

NameRequiredDescriptionDefault
raceIdYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, non-destructive semantics, so the description earns credit for adding non-obvious behavior: the response is partially populated depending on subscription tier, meaning an agent can get a silent partial result rather than an error. It also signals the post-race-only availability window. It stops short of describing error behavior or what happens for an in-progress race.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, with the core capability front-loaded and the plan-gating caveat immediately after. Every sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations covering entitlement behavior, the description does well to disclose the plan gate. But for a 'summary' tool that aggregates telemetry, it gives no sense of what metric families or shape come back, so an agent cannot anticipate the payload or handle the empty/partial case beyond knowing it may be gated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single raceId parameter, and the description never mentions it — no format, no source (race key? season+round?), no example. With low coverage the description is expected to compensate, and it does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (get the post-race analytics status and aggregate telemetry metrics for a race), which is more than a restatement of the title. However, it never distinguishes itself from the near-identical sibling get_telemetry_race_summary, nor from get_race_insights or get_session_analytics, leaving an agent unable to choose between them on purpose alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The plan-tier sentence implies when results are useful (Developer+ for metrics, any plan for status), and 'post-race' implies timing. But there is no explicit when-to-use or when-not-to-use guidance and no routing to alternatives, so selection is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_race_telemetry_aggressionGet Race Telemetry AggressionB
Read-onlyIdempotent

Get driver aggression index rankings for a race. Requires a Custom plan (not included in Developer).

NameRequiredDescriptionDefault
raceIdYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so safety is covered. The description adds a genuinely useful behavioral fact not in the schema or annotations: plan gating (Custom required, Developer excluded), which tells the agent to expect authorization failures. It says nothing about result shape, ranking metric definition, or coverage of the race (all laps? all drivers?), so it remains partial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, action and prerequisite front-loaded, zero filler. Nothing is padded or repeated from the title beyond what is needed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description should at least hint at what an 'aggression index ranking' contains (drivers ordered by score? per-lap?). Combined with an undocumented raceId format and no fallback/alternative guidance, the agent can invoke it but cannot confidently predict or interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden for the single raceId parameter and adds nothing – no expected format (numeric vs composite id), no note that it is required, no example. The description's 'for a race' merely restates that raceId exists.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') and a well-defined resource ('driver aggression index rankings for a race'), which is distinct from the sibling telemetry tools (stints, laps, lap comparison) since none of them expose an aggression index. It is clear what the tool returns conceptually, but not differentiated from the nearby siblings by any explicit contrast.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only guidance is an entitlement note ('Requires a Custom plan'), which is a prerequisite, not usage guidance. Nothing says when to choose this over get_race_telemetry_stints, get_race_telemetry_laps, or get_telemetry_race_summary, so the agent must infer selection criteria on its own.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_race_telemetry_lapsGet Race Telemetry LapsA
Read-onlyIdempotent

Get per-lap telemetry metrics (speed, throttle, brake, DRS, aggression) from telemetry data. Requires Developer or higher. Optional driverId to filter to one driver.

NameRequiredDescriptionDefault
raceIdYes
driverIdNo

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds a genuinely non-structural behavioral fact the agent cannot get elsewhere: a Developer-or-higher access requirement, which affects whether the call will succeed. It omits any note on result volume or pagination, which matters given openWorldHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, zero filler, and correctly ordered: what it returns first, then the access gate, then the optional narrowing parameter. Nothing repeats the schema or the annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does well to enumerate the returned metrics, but it leaves the relationship to the sibling telemetry endpoints unresolved and says nothing about units, per-lap granularity, or whether the aggression metric duplicates get_race_telemetry_aggression. Adequate to invoke, not sufficient to choose confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden. It explains driverId as optional and as a single-driver filter, which is real added meaning, but raceId is never explained and no format or ID-shape guidance is given for either parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (per-lap telemetry metrics) and enumerates the returned metrics (speed, throttle, brake, DRS, aggression), so the agent knows exactly what comes back. It does not differentiate itself from near-identical siblings such as get_telemetry_laps, get_telemetry_driver_laps, or get_race_telemetry_aggression, leaving overlap ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus the telemetry siblings (get_telemetry_laps, get_telemetry_driver_laps, get_race_telemetry_stints, get_race_telemetry_aggression). The only conditional language ('Optional driverId to filter') describes a parameter, not a usage decision, so routing must be inferred from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_race_telemetry_stintsGet Race Telemetry StintsB
Read-onlyIdempotent

Get per-stint telemetry metrics and degradation slopes. Requires a Custom plan (not included in Developer).

NameRequiredDescriptionDefault
raceIdYes
driverIdNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive behavior, so the safety profile is covered. The description adds valuable tier/authorization context (Custom plan required), but says nothing about the shape or granularity of returned stint data or any rate/volume limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the capability and followed by the hard prerequisite. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter, no-output-schema tool, the plan precondition is a meaningful addition, but the absence of any parameter explanation or sibling differentiation leaves gaps an agent must resolve by opening the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the two parameters, so the description must compensate and does not. It never explains that raceId is required or that driverId optionally narrows results to a single driver, nor the expected ID format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('get per-stint telemetry metrics and degradation slopes'), which is more precise than the title alone. It implicitly distinguishes stint-level data from the lap-level siblings (get_race_telemetry_laps, get_telemetry_laps), but never names those alternatives explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The plan-gating sentence ('Requires a Custom plan (not included in Developer)') implies when the call is permitted, which is useful. However, there is no guidance on when a stint-level request is preferable to the numerous telemetry siblings, and no mention of what happens if the plan requirement is unmet.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_race_tyresGet Race TyresB
Read-onlyIdempotent

Get tyre stint records for a race (driver, stint number, lap range, compound, tyre age). Available on every plan.

NameRequiredDescriptionDefault
raceIdYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already establish this as a safe, read-only, idempotent operation, so the bar is lower. The description adds useful context by listing the returned fields and plan availability, but it does not mention raceId format, pagination, or how the result is ordered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded and efficient: one sentence defines the records and their fields, followed by a short plan note. It contains no obvious filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with annotations and no output schema, the description covers enough to understand the result fields. It is still incomplete because it omits raceId source/format and does not clarify how it differs from closely related sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the sole required parameter, raceId, is not described beyond the phrase 'for a race.' The description does not explain raceId format or where to obtain it, so it fails to compensate for the missing schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a clear verb+resource (get tyre stint records for a race) and enumerates the record fields. However, it does not distinguish this tool from the similar sibling get_race_telemetry_stints or from get_race_pitstops, so an agent cannot confidently choose between them from the description alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only contextual note is 'Available on every plan,' which is plan availability rather than usage guidance. It gives no when-to-use condition, no exclusions, and no comparison to alternatives such as get_race_telemetry_stints or get_race_laps.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_race_weatherGet Race WeatherB
Read-onlyIdempotent

Get lap-by-lap weather data for a race. Available on every plan.

NameRequiredDescriptionDefault
raceIdYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, open-world, non-destructive behavior, so the safety profile is covered. The description adds lap-by-lap granularity and plan availability, but does not disclose auth needs, rate limits, or return characteristics beyond the data type.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loading the core purpose and following with plan availability. There is no redundant or wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read tool with rich annotations and no output schema, the description conveys the data scope and availability well enough to select and invoke it. The main remaining gap is the unexplained raceId semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The sole parameter, raceId, has 0% schema description coverage. The phrase 'for a race' only implies that raceId identifies a race; it does not provide format, source, or constraints for the value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb, 'Get', and a clear resource, 'lap-by-lap weather data', scoped 'for a race'. It is readily distinguishable from telemetry, summary, and laps siblings by the weather resource, though it does not explicitly name or contrast those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Available on every plan' provides access context, but the description gives no explicit when-to-use/when-not guidance or alternative tools. Usage is implied by the unique weather scope rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_replay_quotaGet Replay QuotaB
Read-onlyIdempotent

Get the replay delivery quota for this account: distinct-session lifetime slots for your tier.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds that the quota concerns 'distinct-session lifetime slots for your tier,' but it does not clarify whether it returns remaining quota, a limit, or usage details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler. Every phrase contributes to identifying the resource and its scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read tool, the description is minimally sufficient to invoke it. However, with no output schema, it does not explain what the returned quota value looks like or how 'distinct-session lifetime slots' should be interpreted.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

This tool has zero parameters, so there is no parameter semantics burden on the description. The baseline for a zero-parameter tool is 4, and nothing in the description misrepresents the absence of inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get') and resource ('replay delivery quota') scoped to the account and tier. It does not explicitly distinguish itself from nearby siblings such as get_usage, get_billing_plan, or list_replay_sessions, but the resource is specific enough to identify the operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus get_usage, get_billing_plan, or other replay-related siblings. The scope 'for this account' implies context but does not provide explicit when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_replay_statusGet Replay StatusA
Read-onlyIdempotent

Check whether a session's playback artifact is ready to stream.

NameRequiredDescriptionDefault
sessionIdYesSession ID from list_replay_sessions or get_demo_session.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare this as a read-only, idempotent, non-destructive, open-world operation, so the description does not need to restate safety. It adds the readiness-check purpose but does not explain return states, polling behavior, or what happens if no playback artifact exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no redundant or filler content. It states the core check immediately and is appropriately sized for a simple one-parameter status tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only status tool with rich annotations and complete schema coverage, the description is largely sufficient. The main remaining gap is that no output schema exists and the description does not enumerate the possible status values, though the core readiness concept is conveyed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema itself explains that sessionId comes from list_replay_sessions or get_demo_session. The description adds no parameter-level meaning beyond what the schema already provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Check') and resource ('session's playback artifact is ready to stream'), making the tool's purpose clear. It does not explicitly distinguish itself from nearby siblings such as prepare_replay or list_replay_sessions, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used to check readiness before streaming, but it does not explicitly state when to call it, whether it should be polled after prepare_replay, or when to use alternatives. Usage is therefore inferable but not spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_season_racesGet Season RacesB
Read-onlyIdempotent

List all races in a season with circuit, date, and data quality tier. Available on every plan.

NameRequiredDescriptionDefault
yearYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, so the safety profile is fully covered. The description adds modest value by disclosing the returned fields and plan availability, but says nothing about ordering, pagination, or behavior on an invalid/empty season.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero waste; the core purpose and return fields are front-loaded before the plan-availability note.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read tool with rich annotations and no output schema, the description covers purpose, return fields, and plan availability. Only minor gaps remain around `year` format and result ordering/size, which is acceptable at this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single required `year` parameter, and the description only implies season-year semantics via "in a season." It does not clarify the accepted format (e.g., 2024 vs. a season ID) or the wide/odd numeric bounds present in the schema, so it fails to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ("List all races in a season") and even previews the returned fields (circuit, date, data quality tier). It is clearly distinguishable from sibling tools like get_race (single race) or list_events, though it does not name those alternatives directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Available on every plan" is an access/gating hint rather than usage guidance. The agent can infer that supplying a season year yields that season's race list, but there is no explicit when-to-use versus get_race, list_events, or list_seasons, and no exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_season_standingsGet Season StandingsA
Read-onlyIdempotent

Get final driver and constructor championship standings for a season. Available on every plan.

NameRequiredDescriptionDefault
yearYesSeason year, e.g. 2025.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds two pieces of context not in annotations: 'final' (end-of-season classification rather than live) and 'Available on every plan' (no tier gating), both of which prevent wasted calls or plan checks.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the core action front-loaded and the plan-availability note appended as a secondary fact. No filler, no repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with full annotation coverage, the description covers what is returned at a high level (driver and constructor standings) and confirms universal plan access. Only the exact return shape (e.g. ordering, position fields) is unspecified, which with no output schema is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter (year) with 100% schema coverage and an inline example ('Season year, e.g. 2025'), so the schema carries the burden. The description's phrase 'for a season' is consistent but adds no format, range, or edge-case guidance (e.g. current vs past seasons) beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Get') plus resource ('final driver and constructor championship standings for a season'), which is clearly distinct from the sibling per-entity tools get_driver_standings and get_constructor_standings because it returns both. It does not explicitly name those siblings, so differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'for a season' plus the required year parameter implies when to call it, and 'final ... standings' hints it is for completed/end-of-season classification rather than live timing. However, it never states when to prefer this over get_driver_standings or get_constructor_standings, nor any precondition about season completion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_session_analyticsGet Session AnalyticsA
Read-onlyIdempotent

Get per-lap ML analytics snapshot for a session (pit probability, SC probability, tyre health, LTOE, win probability). Requires Developer or higher.

NameRequiredDescriptionDefault
sessionIdYesSession ID, e.g. '2026-bahrain_r'.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds a genuinely non-schema behavioral fact: the Developer-or-higher authorization requirement, which the agent needs before attempting the call. It does not disclose cost, latency, or whether the ML snapshot can be stale/missing for live sessions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no padding: the capability and its payload are front-loaded, followed by the access constraint. Every clause carries information an agent would otherwise have to guess.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read-only tool this is very nearly complete, and the enumerated metric list effectively communicates what comes back in the absence of an output schema. What's missing is any hint about response shape (per-lap array? keyed by lap number?) or behavior when analytics are unavailable for a session.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single required parameter with 100% schema description coverage, including an example format ('2026-bahrain_r'). The description adds nothing about the sessionId beyond what the schema already provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') and a well-scoped resource ('per-lap ML analytics snapshot for a session'), then enumerates the exact metrics returned (pit probability, SC probability, tyre health, LTOE, win probability). That makes it clearly distinct from generic siblings like get_race_summary or get_race_insights. It stops short of naming an alternative sibling, so it lands at 4 rather than 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the presence of the metric list – an agent can infer it should call this when it needs model-derived per-lap probabilities. There is no explicit statement of when to prefer this over get_race_insights or get_race_telemetry_laps, and the 'Requires Developer or higher' line is a prerequisite, not a usage rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_subscriptionGet SubscriptionA
Read-onlyIdempotent

Get the current subscription tier, plan limits (webhooks, deliveries, HMAC, analytics enrichment), and live usage snapshot for this account.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds useful behavioral context by naming the returned content: tier, plan limits for webhooks/deliveries/HMAC/analytics enrichment, and a live usage snapshot. It does not describe error behavior or response structure in detail, but with annotations present this is above the baseline.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence, front-loaded with the verb and resource, then enumerating the meaningful returned categories. Every phrase contributes to identifying what the tool retrieves.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only accessor with rich annotations and no output schema, the description supplies the essential return-content summary an agent needs. There is little additional behavioral context required for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there are no parameter semantics to explain. The baseline for zero-param tools is 4, and the description does not confuse the caller with irrelevant parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Get the current subscription tier, plan limits ... and live usage snapshot for this account.' The enumerated contents make the tool's scope clear. It does not explicitly differentiate itself from related siblings such as get_billing_plan or get_usage, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is the account subscription/limits/usage tool, but it gives no explicit guidance on when to choose it over get_billing_plan, get_usage, or get_usage_by_feed. There are no exclusions or alternative-routing instructions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_telemetry_driver_lapsGet Telemetry Driver LapsA
Read-onlyIdempotent

Get per-lap telemetry for a single driver across all laps of a race. Requires Developer or higher.

NameRequiredDescriptionDefault
raceIdYes
driverIdYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds useful context about the required plan tier, but it does not describe return size, pagination, data channels, or failure behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the purpose and followed by the access requirement. Nothing is redundant or wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only telemetry tool with two required parameters and no output schema, the description is minimally adequate. However, 'per-lap telemetry' is vague about what data is returned, and the description does not differentiate the tool from closely related telemetry siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 for undocumented parameters. It clarifies that one parameter identifies the race and one identifies a single driver, but it does not explain ID formats, allowed values, or whether driverId refers to a permanent or race-specific identifier.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: 'Get per-lap telemetry for a single driver across all laps of a race.' The scope ('single driver', 'all laps') helps distinguish it from broader telemetry siblings, though it does not name those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states an access prerequisite ('Requires Developer or higher') and implies the use case through its scope. However, it does not explicitly say when to choose this tool over similar telemetry tools such as get_race_telemetry_laps or get_telemetry_laps.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_telemetry_lap_comparisonGet Telemetry Lap ComparisonB
Read-onlyIdempotent

Get all drivers' telemetry for a single lap — useful for side-by-side lap comparisons. Requires Developer or higher.

NameRequiredDescriptionDefault
raceIdYes
lapNumberYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds a genuinely non-annotated behavioral fact — the Developer-or-higher permission gate — but says nothing about payload size or how many samples per driver to expect from an all-drivers query.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences, with the operation and scope front-loaded ahead of the access requirement. 'Lap comparisons' mildly restates the tool name, but nothing else is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With only two parameters and full annotation coverage, the definition is nearly callable as-is. The remaining gap is that no output schema exists and the description never characterizes the returned telemetry payload (channels, sampling, per-driver grouping), which matters for a tool that returns every driver's data at once.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning, and it only partially does: 'single lap' implies lapNumber is one lap rather than a range. It says nothing about raceId format, lap numbering conventions (race lap vs. per-driver lap), or that no driver filter exists by design.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('get all drivers' telemetry') scoped to a single lap, which distinguishes it in substance from get_telemetry_driver_laps (per-driver) and get_telemetry_laps. It never names those siblings, so the differentiation is inferable rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Useful for side-by-side lap comparisons' gives one concrete usage context, and the Developer tier requirement sets an access precondition. There is no explicit when-not guidance and no named alternative for single-driver or multi-lap telemetry needs, leaving routing to the agent's inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_telemetry_lapsGet Telemetry LapsA
Read-onlyIdempotent

Get per-lap telemetry aggregates (avg/max speed, throttle, brake, DRS, aggression index). Returns all drivers by default. Filter with driverId or lapNumber. Requires Developer or higher.

NameRequiredDescriptionDefault
raceIdYesRace ID slug, e.g. '2026-bahrain-r1'.
driverIdNoFilter to a specific driver.
lapNumberNoFilter to a specific lap number.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely non-redundant behavior: results are aggregated per lap, all drivers are returned unless filtered, and access requires the Developer tier or higher — the auth constraint is especially valuable for avoiding a failed call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences with no filler, front-loaded with what the tool returns before moving to defaults, filtering, and auth. It could be marginally tighter by folding the filter sentence into the defaults sentence, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of describing return values and does so by listing the aggregate fields, plus it discloses the auth tier and default scope. It stops short of stating result volume or ordering for an all-driver default, which would matter for an open-world telemetry endpoint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are documented in structured form and the baseline is 3. The description adds only the default-all-drivers semantics and the fact that driverId and lapNumber act as filters, which slightly exceeds the schema but does not clarify format or interaction between the two filters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource and enumerates the aggregates returned (avg/max speed, throttle, brake, DRS, aggression index), so an agent knows exactly what data comes back. It does not, however, differentiate itself from near-identical siblings such as get_race_telemetry_laps or get_telemetry_driver_laps, which is the main ambiguity risk.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives in-tool guidance ('Returns all drivers by default. Filter with driverId or lapNumber'), which tells the agent how to narrow results. It never says when to choose this over get_race_telemetry_laps, get_telemetry_driver_laps, or get_telemetry_lap_comparison, so the sibling routing decision is left entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_telemetry_race_summaryGet Telemetry Race SummaryA
Read-onlyIdempotent

Get race-level telemetry summary: max speed, fastest driver, average throttle/brake percentages, top aggression driver. Requires Developer or higher.

NameRequiredDescriptionDefault
raceIdYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds meaningful context beyond them by stating the permission tier required (Developer or higher), which an agent needs before calling. It does not mention behavior for races with no telemetry data or error cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the returned content and ending with the constraint. No filler or repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-value burden and does so by listing the four summary metrics returned. It is nearly complete; only edge cases (races lacking telemetry, freshness of the summary) are unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single required parameter, raceId, with 0% schema description coverage, so the schema provides only the name and type. The description does not explain what a raceId is, where to obtain one (e.g., list_events or get_race), or its format, though the name is fairly self-explanatory.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get race-level telemetry summary') and enumerates the exact contents: max speed, fastest driver, average throttle/brake percentages, top aggression driver. The 'race-level' scope plus the field list distinguishes it from sibling tools like get_race_telemetry_stints, get_race_telemetry_aggression and get_telemetry_laps.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only guidance is the access prerequisite ('Requires Developer or higher'), which is useful for planning but not selection guidance. It never says when to choose this over get_race_summary or get_race_telemetry_aggression, leaving the agent to infer usage from the field list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_usageGet UsageA
Read-onlyIdempotent

Get delivery usage summary for the current period: total deliveries, failures, tier, and remaining monthly delivery bucket.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is known. The description adds what the payload reports but says nothing about quota-scope (account vs API key), freshness, or whether usage is real-time or lagged.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence with a colon-delimited field list; every clause carries information and nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters and no output schema, the description carries the return-value burden and does enumerate the key fields. Missing only cycle boundaries or refresh cadence that would make the expected values fully interpretable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so the parameter baseline of 4 applies; the empty object schema leaves nothing to disambiguate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (get) plus resource (delivery usage summary) and an enumeration of the returned fields: deliveries, failures, tier, remaining monthly bucket. The 'current period' scoping implicitly separates it from get_usage_hourly and get_usage_history, though no sibling is named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'For the current period' hints that historical or per-feed breakdowns live elsewhere, but the description never names get_usage_by_feed, get_usage_hourly, or get_usage_history as alternatives, so routing relies on inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_usage_by_feedGet Usage By FeedA
Read-onlyIdempotent

Get webhook delivery counts broken down by feed for the current period. Useful for identifying which feeds are driving delivery volume.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and non-destructive, so the safety profile is covered. The description adds the meaningful scoping detail that results are limited to 'the current period', but it says nothing about how 'current period' is defined (billing cycle vs. rolling window), whether results are empty when no deliveries occurred, or how many feeds are returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, and the core function is front-loaded before the interpretive hint. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters, no output schema and rich annotations, the burden on the description is modest, and it does convey the metric, the breakdown dimension and the time scope. The remaining gap is that neither the meaning of 'feed' nor the shape of the returned breakdown is clarified anywhere, since no output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so schema coverage is complete by construction and there is nothing for the description to disambiguate. Baseline for a no-parameter tool applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource — webhook delivery counts broken down by feed for the current period — which is far more informative than the title alone. It implicitly separates itself from get_usage, get_usage_latency and get_usage_hourly by naming the 'by feed' dimension, but it never explicitly contrasts with those siblings, so differentiation is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Useful for identifying which feeds are driving delivery volume' gives an implied use case, which is better than nothing. However, there is no guidance on when to prefer this over get_usage (overall counts) or get_usage_hourly (time-bucketed), and no exclusions or preconditions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_usage_historyGet Usage HistoryB
Read-onlyIdempotent

Get historical delivery counts and failure rates over past periods.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly, idempotent, non-destructive, open-world behavior, so the safety profile is covered. The description adds that this returns delivery counts and failure rates, but it does not say what window 'past periods' covers, whether the result is aggregated or bucketed, or how the zero-parameter call decides its range.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the resource and metrics come first. It is efficient but so terse that scope information an agent needs was simply omitted rather than trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no parameters, the description carries the burden of explaining what comes back and over what range; it names the metrics but not the shape, granularity, or default period. Adequate to identify the tool, insufficient to predict its output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so there is nothing for the description to disambiguate at the parameter level, which sets the baseline at 4. The only residual gap is that the implicit default time window is never defined.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource and states the returned metrics (delivery counts, failure rates) and their historical scope. It does not, however, distinguish this from close siblings like get_usage, get_usage_by_feed, or get_usage_hourly, so an agent cannot tell which usage tool to pick from the description alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance and no mention of the four sibling usage tools. The word 'historical' faintly implies this is the trend-over-time option versus get_usage, but that inference is left entirely to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_usage_hourlyGet Usage HourlyA
Read-onlyIdempotent

Get webhook delivery volume broken down by hour for the last 24 hours. Useful for identifying traffic spikes.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare this as a read-only, idempotent, non-destructive operation, so the safety profile is clear. The description adds useful scope beyond annotations by specifying the fixed 24-hour window and hourly breakdown, though it does not discuss authentication, rate limits, or output details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no wasted text. The core scope, hourly breakdown over the last 24 hours, is front-loaded before the use case.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple zero-parameter read tool with rich annotations, the description gives enough to understand what it returns and over what time window. Minor details such as timezone or exact response shape are omitted, but the absence of an output schema makes the description otherwise sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero input parameters, so there are no parameter semantics to explain. The baseline for a no-parameter tool is 4, and the description does not create confusion about arguments.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it gets webhook delivery volume with hourly granularity for the last 24 hours. This distinguishes it reasonably well from broader usage siblings, though it does not explicitly name alternatives such as get_usage, get_usage_by_feed, or get_usage_history.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Useful for identifying traffic spikes' implies a usage context, but the description does not explain when to choose this tool over sibling usage tools or when it is not appropriate. Guidance is present but limited to one implied scenario.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_usage_latencyGet Usage LatencyA
Read-onlyIdempotent

Get webhook delivery latency percentiles (p50, p95, p99) broken down by feed for the current period.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly, idempotent, non-destructive and openWorld, so safety is settled. The description contributes the useful constraint that results are scoped to the current period and aggregated per feed, but it does not define what 'current period' means (rolling window vs billing cycle) or how feeds with no deliveries are represented.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the action and the returned metrics, with zero filler. Nothing could be removed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters and no output schema, the description carries the burden of describing the return shape, and it does so well (three named percentiles, grouped by feed, current period). The only meaningful gap is the undefined period boundary, which matters for interpreting the numbers.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters and 100% schema coverage, so the baseline is 4. The description correctly signals there is nothing to parameterize by stating the breakdown and period are implicit/server-determined.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (delivery latency percentiles) and even names the returned metrics (p50, p95, p99) and grouping (by feed). It is distinguishable from the count-oriented siblings (get_usage, get_usage_by_feed, get_usage_hourly), but it never names those siblings to sharpen the contrast.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'for the current period' implies a temporal scope, but the description gives no explicit when-to-use, no exclusions, and never routes the agent to get_usage_by_feed or get_usage_history for historical latency. The agent must infer the split between this and the four other usage tools on its own.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_webhookGet WebhookB
Read-onlyIdempotent

Get a single webhook subscription by ID.

NameRequiredDescriptionDefault
webhookIdYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is well covered. The description adds only the scope of retrieval and does not disclose error behavior, whether missing IDs return null or throw, or any authentication or rate-limit context. With annotations carrying the main behavioral burden, this is adequate but thin.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler. It states the action and resource efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only get-by-ID tool with annotations covering safety, the definition is minimally sufficient. However, with no output schema, the description could add value by indicating what a webhook subscription object contains or what happens when no matching webhook exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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 says retrieval is 'by ID', which maps loosely to webhookId, but it does not state the expected ID format, source, or constraints beyond the schema's minLength. For a single undocumented parameter, this leaves a meaningful gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: retrieving a single webhook subscription by ID. It implicitly distinguishes itself from list_webhooks by saying 'single', but does not explicitly name alternatives or scope the retrieval against siblings such as get_webhook_logs or get_webhook_secret.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool versus list_webhooks or other webhook-related siblings. The phrase 'single webhook subscription by ID' implies the use case but does not state prerequisites, exclusions, or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_webhook_logsGet Webhook LogsB
Read-onlyIdempotent

Retrieve recent delivery logs for a webhook — shows status codes, retry counts, and payload excerpts.

NameRequiredDescriptionDefault
limitNo
webhookIdYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds genuine value by disclosing the payload contents (status codes, retries, excerpts) given there is no output schema, but it omits the retention window ('recent' is undefined) and whether results paginate or truncate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler: verb, resource, and return content in one pass.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read tool with rich annotations and no output schema, the description adequately covers what the call returns. It falls short only on log retention/limit behavior and error cases for an invalid webhookId.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden, yet it mentions neither webhookId nor limit by name or meaning. The only hint is the vague word 'recent', which loosely maps to limit but gives no guidance on the 1-200 range or the default of 50.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (retrieve delivery logs for a webhook) and further scopes the content returned (status codes, retry counts, payload excerpts). This distinguishes it from get_webhook (config) and test_webhook (sends a test), though it never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No statement of when to use this versus get_webhook, test_webhook, or list_webhooks. The phrase 'recent delivery logs' implies a debugging/inspection scenario but the agent must infer that, and there are no exclusions or prerequisites (e.g., webhook must exist) given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_webhook_secretGet Webhook SecretB
Read-onlyIdempotent

Retrieve the current HMAC signing secret for a webhook.

NameRequiredDescriptionDefault
webhookIdYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered by structured data. The description adds that the value is an HMAC signing secret and that it is the 'current' one (implying rotation invalidates it), but says nothing about whether the secret is returned in plaintext or masked, or what authorization is needed to read a sensitive credential — a meaningful omission for a secret-retrieval tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero waste. It is efficient, though its brevity leaves the gaps noted in other dimensions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read with rich annotations and no output schema, the description is minimally adequate. However, for a credential-returning tool it should at least state the webhookId format and whether the secret comes back in plaintext or masked.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single webhookId parameter has 0% schema description coverage, so the schema provides no semantics. The description only ties it loosely to 'a webhook'; it does not say whether the ID is a numeric ID, UUID, or URL, nor how to obtain it (e.g. from list_webhooks).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with a qualifier ('current HMAC signing secret'), which distinguishes it from sibling rotate_webhook_secret by implying retrieval of the existing value rather than generating a new one. It never names that sibling explicitly, so the differentiation relies on inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer this is for reading the current signing secret (e.g. to verify HMAC signatures). There is no explicit statement of when to use this versus rotate_webhook_secret or get_webhook, and no prerequisites such as required permissions are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_circuitsList CircuitsB
Read-onlyIdempotent

List all F1 circuits with location and coordinates. Available on every plan.

NameRequiredDescriptionDefault
limitNo
offsetNo
countryNo

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds one genuinely non-structured fact ('Available on every plan') but says nothing about pagination or result-set size, which matters for a list endpoint with limit/offset.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the core scope front-loaded and no wasted words. The brevity is appropriate, though the second sentence is more marketing than operational guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description partially compensates by naming returned fields ('location and coordinates'), but it omits pagination semantics for limit/offset and the existence of a country filter. For a 3-parameter list tool, an agent has to open the schema to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so all three parameters (limit, offset, country) are undocumented in the schema and the description does not compensate. The country filter in particular is never hinted at, and no guidance is given on bounds or pagination strategy.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('List all F1 circuits') and adds the payload scope ('with location and coordinates'), which distinguishes it from the singular get_circuit sibling. It does not name that sibling explicitly, so it stops short of 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'List all' implies the bulk-enumeration case versus the single-resource get_circuit, but the description never states when to prefer one over the other. Usage is inferable from the name and scope rather than being explicitly routed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_constructorsList ConstructorsC
Read-onlyIdempotent

List constructors. Available on every plan.

NameRequiredDescriptionDefault
limitNo
activeNo
offsetNo
lineageNoFilter by lineage slug, e.g. 'enstone'.

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as a safe, read-only, idempotent, non-destructive operation. The description adds the useful plan-availability note, but does not disclose pagination behavior, filtering behavior, or return format beyond the basic 'list' implication.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short, front-loaded, and free of filler. However, it is extremely terse for a tool with four optional parameters, and the plan-availability sentence is only marginally useful compared with missing filter and pagination context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with four optional parameters, low schema description coverage, and no output schema, the description is too sparse. It does not explain available filters, pagination, or what the returned list contains, leaving important call behavior undocumented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25%, with just the lineage parameter documented in the schema. The description does not mention limit, active, offset, or lineage, so it fails to compensate for the low schema coverage of this four-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: 'List constructors.' An agent can understand the basic operation, but the description does not differentiate it from the sibling get_constructor or explain what kind of constructor list is returned.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only additional guidance is 'Available on every plan,' which concerns plan availability rather than when to use this tool versus alternatives like get_constructor or other list tools. No usage context or exclusions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_driversList DriversC
Read-onlyIdempotent

List drivers. Available on every plan; page size is capped at 25 on Free and 100 on paid plans.

NameRequiredDescriptionDefault
limitNo
activeNotrue = currently racing, false = retired.
offsetNo
searchNoPartial surname or forename match.
nationalityNoFilter by nationality, e.g. 'British'.

TDQS

C2.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive behavior, so the description doesn't need to repeat that. It does add genuinely non-obvious operational context: the tool is available on every plan and page size is throttled to 25 on Free versus 100 on paid, which refines the schema's maximum=100 in a way the schema cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler, and the plan/pagination constraint is placed immediately after the purpose statement. It is appropriately sized for what it attempts, though it is too sparse to be exemplary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter list tool with no output schema, the description never says what is returned, how results are ordered, or how limit/offset combine. Annotations cover the safety profile and the plan caps address the main pagination gotcha, but the omission of return-shape expectations leaves it only minimally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 60%: active, search, and nationality are documented in the schema, while limit and offset are not. The plan-based page-size cap adds meaningful context for the limit parameter that the schema's min/max alone does not convey, so the description slightly compensates for the gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The sentence "List drivers" essentially restates the tool name and title without adding scope. It does not distinguish this tool from siblings like get_driver, get_driver_results, or list_constructors, so an agent gains nothing beyond the identifier itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus get_driver (single record) or the many other driver-related siblings. The plan-availability sentence is a constraint, not usage direction, and no exclusions or alternatives are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_eventsList EventsB
Read-onlyIdempotent

List events (race weekends) for the current or a specific season, including session schedules and status.

NameRequiredDescriptionDefault
yearNoSeason year, e.g. 2026. Defaults to current season.
limitNo
upcomingNotrue = only return events that haven't started yet

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description usefully adds that results include session schedules and status, but says nothing about pagination despite a default limit of 30 and a hard max of 50, nor about ordering of returned events.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler, and the useful payload detail (schedules and status) comes last where it reads naturally. Slightly dense parenthetical but nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter read-only list tool with no output schema, the description covers purpose and scope but omits the practical facts an agent needs: default and maximum page size, whether results are paginated, and how this list relates to the season/race endpoints. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%: year and upcoming are documented inline, while limit has no description at all. The description echoes the year default ('current or a specific season') but adds nothing about limit (default 30, max 50) or the upcoming flag, so it does not compensate for the gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List events') and disambiguates the domain term by glossing events as 'race weekends', plus says what each record carries (session schedules and status). It stops short of distinguishing it from adjacent siblings like get_season_races or list_seasons, so an agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'for the current or a specific season' implies the default-vs-explicit-year usage, which is the only real decision here. There is no statement of when to prefer this over get_season_races, list_seasons, or get_race, nor any exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_feedsList FeedsB
Read-onlyIdempotent

List all available RaceHooks data feeds, including which subscription tier each feed requires. The special 'events.race' feed is a synthetic feed that emits structured events (overtakes, pit stops, safety cars, etc.) derived from multiple raw feeds.

NameRequiredDescriptionDefault
limitNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds real value by disclosing that results carry per-feed subscription tier requirements and that 'events.race' is a derived/synthetic feed. It stops short of describing pagination or what a full listing looks like when the default cap is hit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, purpose front-loaded, second sentence reserved for the one genuinely non-obvious concept (the synthetic events feed). No filler or restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only catalog tool with annotations covering safety and no output schema, the description covers the what and a notable special case. It is missing the pagination/limit behavior an agent needs to retrieve a complete list, which is the main remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the single 'limit' parameter (default 50, max 100) is never mentioned in the description. Worse, the wording 'List all available' suggests an unbounded listing, which conflicts with a default cap of 50 and no disclosure of how to page past it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List all available RaceHooks data feeds') plus the useful detail that subscription tier requirements are included. It also calls out the special 'events.race' synthetic feed, which distinguishes its content from raw feeds. It does not, however, contrast itself with adjacent catalog-style tools like get_usage_by_feed or list_events.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: an agent can infer this is the discovery call before hitting a specific feed or usage endpoint. There is no explicit when-to-use/when-not guidance, no mention of prerequisites (auth tier), and no mention of where to go next after listing feeds.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_insight_racesList Insight RacesA
Read-onlyIdempotent

List races that have a completed post-race analytics pipeline — i.e. races where get_race_insights will return data. Available on every plan.

NameRequiredDescriptionDefault
seasonNoFilter to a specific season year.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly, idempotent, and non-destructive, so the bar is lower. The description adds two non-obvious facts beyond the schema: a plan-availability guarantee ("Available on every plan") and the semantic contract that returned races are exactly those with data. It does not mention result volume or ordering, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single em-dash-joined sentence that front-loads the core semantics and appends the plan note. No filler, and the key distinction lands before the qualifier.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-required-parameter list tool with a fully documented schema and annotations covering safety, the description supplies the critical contract (which races appear and why). Only minor gaps remain: no hint about ordering, volume, or what to do when the list is empty.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the single season parameter is already fully documented as a year filter. The description adds nothing about the parameter, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (races), and criticizes the scope precisely: only races whose analytics pipeline is complete, i.e. where get_race_insights returns data. This distinguishes it clearly from siblings like list_events or get_season_races, which list races without that data-availability guarantee.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The definition implies a clear workflow: call this first to discover which races get_race_insights can serve. It names the dependent sibling explicitly, but never states exclusions (e.g. use list_events/get_season_races when you want all races regardless of insight availability).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_replay_sessionsList Replay SessionsA
Read-onlyIdempotent

List recorded sessions that have archived data and can be replayed. Only completed sessions with archive paths are returned. Self-serve tiers (Free and Developer) list the current season only, plus the curated demo session; the full historical archive is on Custom. restrictedToSeason in the response reports the applied limit.

NameRequiredDescriptionDefault
typeNoSession type.
yearNoCalendar year, e.g. '2026'.
limitNoMax results (default 200).
offsetNoResults to skip (default 0).

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/idempotent/non-destructive, so the description adds value by disclosing tier-based result restrictions (Free/Developer = current season plus demo, Custom = full archive) and pointing at the `restrictedToSeason` response field. This is meaningful behavioral context beyond structured metadata, though pagination/rate-limit behavior is not discussed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the core purpose followed by the qualification rule and tier caveat. Every sentence carries information, no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description partially compensates by calling out the `restrictedToSeason` response field and explaining the tier constraint that shapes results. An agent has enough to call it correctly; return shape beyond that one field remains unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so type, year, limit, and offset are already documented with formats, patterns, and bounds. The description adds no parameter-level detail beyond what the schema provides, which is acceptable given full coverage but not additive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (list) and resource (replay sessions) with clarifying scope: 'recorded sessions that have archived data and can be replayed'. This distinguishes it from siblings like prepare_replay and get_replay_quota implicitly through the filtering criteria, though it doesn't name an alternative explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives useful context about what qualifies (completed sessions with archive paths) and tier gating, which implies when the tool is useful. But it never states when an agent should choose this over prepare_replay or get_demo_session, nor any prerequisites. Usage is inferred rather than directed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_seasonsList SeasonsA
Read-onlyIdempotent

List all available F1 seasons with race counts. Available on every plan.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is fully covered elsewhere. The description contributes the plan-availability note and hints that counts are included, but says nothing about ordering, pagination, or completeness of the season list.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the purpose front-loaded and the availability caveat second; every clause carries information and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters, no output schema, and rich annotations, the description covers what an agent needs to select the tool: what it returns (seasons with race counts) and who can call it. A brief note on whether the list is exhaustive or paginated would close the remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline of 4 applies. The mention of race counts is an output-side detail rather than a parameter concern.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List all available F1 seasons') and adds a concrete payload detail ('with race counts') that an agent can use to decide whether this call is sufficient. It doesn't explicitly name a sibling or contrast with get_season_races/list_events, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Available on every plan' conveys a gating condition (no plan restriction), which is useful context, but the description never says when to call this versus siblings such as get_season_races or list_events. Usage is only implied — e.g. discovering valid season identifiers before calling a season-specific tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_webhooksList WebhooksC
Read-onlyIdempotent

List all webhook subscriptions for the authenticated RaceHooks account.

NameRequiredDescriptionDefault
limitNo
offsetNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered elsewhere. The description's only added value is the phrase 'for the authenticated RaceHooks account', an auth scoping hint; it says nothing about the fact that results are paginated, that a default limit of 20 applies, or that 'all' is therefore not literally true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler or redundancy. It earns its place but is sized so minimally that it undersells the tool rather than over-explaining it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a paginated list tool with two undocumented parameters and no output schema, the description should explain paging and result shape. It also asserts 'all' subscriptions, which is misleading against a default limit of 20 -- the agent could believe it received the complete set when it received one page.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so limit and offset are documented only by their type, default, and bounds. The description does not mention pagination at all, leaving the agent to infer from the parameter names that limit/offset are page controls; with low coverage the description was expected to compensate and does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('List all webhook subscriptions') and names the scope ('authenticated RaceHooks account'), which lets an agent distinguish it from get_webhook, create_webhook, and the non-webhook sibling list_feeds. It stops short of a 5 because it never explicitly contrasts itself with those adjacent webhook siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this versus get_webhook, get_webhook_logs, or list_feeds; usage must be inferred from the name. No prerequisites, no exclusions, no alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prepare_replayPrepare ReplayA
Idempotent

Prepare a session for recorded playback, generating its playback artifact if not already cached. Check readiness with get_replay_status.

NameRequiredDescriptionDefault
sessionIdYesSession ID from list_replay_sessions or get_demo_session.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false, so the description's 'if not already cached' wording usefully explains the caching mechanism behind idempotency. Pointing to get_replay_status implicitly signals that artifact generation may not complete synchronously, which is valuable beyond the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and side effect, followed by the follow-up call. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter preparation tool with no output schema, the description covers purpose, side effect, and the companion verification step. It could say more about timing or failure behavior, but an agent has enough to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the sessionId parameter already documents its source tools (list_replay_sessions, get_demo_session). The description adds no further parameter meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('Prepare a session for recorded playback') and adds the key side effect of generating the playback artifact. It doesn't explicitly differentiate against the many sibling read tools, but the pointer to get_replay_status gives a functional anchor.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The second sentence establishes a clear prepare-then-verify sequence with get_replay_status, which tells the agent when this tool is appropriate relative to its companion. It stops short of stating exclusions or what to do if preparation fails, but the operational context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rotate_webhook_secretRotate Webhook SecretA
Destructive

Rotate the HMAC signing secret for a webhook. The old secret is invalidated immediately — update your server before calling this. The new secret is shown once.

NameRequiredDescriptionDefault
webhookIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, but the description adds the critical operational facts those hints don't convey: the old secret dies immediately and the new secret is displayed only once. It does not mention permission requirements or whether a grace period exists, keeping it just under full marks.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each doing distinct work: what it does, the irreversible consequence plus prerequisite, and the one-time reveal. The most consequential fact (immediate invalidation) is front-loaded right after the purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly discloses the one-time secret reveal and immediate invalidation, which is what an agent needs to avoid breaking a consumer. The missing piece is any guidance on obtaining the webhookId, though parameter handling is otherwise trivial.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden for the single webhookId parameter, yet it never mentions the parameter, its expected format, or where the ID comes from (e.g., list_webhooks). It only implies 'a webhook' generically.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (rotate) and resource (HMAC signing secret for a webhook), which cleanly separates it from siblings like get_webhook_secret, update_webhook, and delete_webhook. An agent knows exactly what operation this performs without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear precondition: 'update your server before calling this,' which tells the agent the ordering constraint relative to consumer-side code. It does not explicitly name get_webhook_secret as the read-only alternative for inspection scenarios, so it falls short of full when/when-not routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

test_webhookTest WebhookA

Send a test payload to a webhook endpoint immediately. Useful for verifying your server is reachable and your HMAC verification code is correct.

NameRequiredDescriptionDefault
webhookIdYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (not read-only, open-world, non-idempotent, non-destructive). The description adds that delivery is immediate and that HMAC signatures will be exercised, but says nothing about rate limits, side effects on the receiving server, or what a failed test looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the action front-loaded and the rationale second. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter tool with no output schema, the essentials are close to covered, but an agent still cannot tell what payload is sent, what the success/failure response looks like, or how to interpret a delivery error.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the single webhookId parameter is documented nowhere. The description says only "a webhook endpoint" without naming the parameter, stating its format, or clarifying that an ID (not a URL) is expected.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: sends a test payload to a webhook endpoint. This clearly separates it from create_webhook, get_webhook_logs, and other siblings, though it never explicitly names what it is not.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Useful for verifying your server is reachable and your HMAC verification code is correct" gives a concrete when-to-use condition. It lacks any when-not guidance or mention of alternatives such as inspecting get_webhook_logs instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_webhookUpdate WebhookA
Idempotent

Update an existing webhook subscription. Use active: false to pause delivery, active: true to resume. Can also update the endpoint URL, HTTP method, or filters without deleting and recreating the webhook.

NameRequiredDescriptionDefault
activeNofalse = pause delivery, true = resume.
filtersNo
webhookIdYes
webhookUrlNoNew endpoint URL.
webhookMethodNo

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=true, and openWorldHint=true, so safety and idempotency are covered. The description usefully adds pause/resume semantics, but says nothing about partial-update behavior (what happens to omitted filters), whether pausing drops queued deliveries, or auth requirements. Adequate but with clear 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action, then the most operationally useful detail (pause/resume). No filler or restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter tool with a nested object and no output schema, the description covers the top-level intent but leaves the nested filters structure and the partial-update contract unexplained. It is enough to call the tool for the simple cases but incomplete for the richer ones.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 40% and filters is a nested object, yet the description only lists 'filters' as an updatable field without explaining drivers/positions/constructors semantics. The active and webhookUrl explanations duplicate what the schema already documents, so added value beyond the schema is thin.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update an existing webhook subscription') and immediately enumerates what is mutable (active flag, URL, method, filters). The verb cleanly separates it from the create_webhook, delete_webhook, and test_webhook siblings without needing to name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete when-to-use guidance via 'Use active: false to pause delivery, active: true to resume' and explicitly frames the alternative of deleting and recreating as unnecessary. It lacks explicit exclusions (e.g., when to prefer delete_webhook or test_webhook), which keeps it short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 58 tool updatesv0.1.0
    • First observedcreate_webhook
    • First observeddelete_webhook
    • First observedget_billing_plan
    • First observedget_circuit
    • First observedget_constructor
    • First observedget_constructor_results
    • First observedget_constructor_standings
    • First observedget_demo_session
    • First observedget_driver
    • First observedget_driver_results
    • First observedget_driver_standings
    • First observedget_event_pace
    • First observedget_fantasy_pit_times
    • First observedget_fantasy_scores
    • First observedget_live_session
    • First observedget_model_meta
    • First observedget_race
    • First observedget_race_insights
    • First observedget_race_laps
    • First observedget_race_pitstops
    • First observedget_race_qualifying
    • First observedget_race_summary
    • First observedget_race_telemetry_aggression
    • First observedget_race_telemetry_laps
    • First observedget_race_telemetry_stints
    • First observedget_race_tyres
    • First observedget_race_weather
    • First observedget_replay_quota
    • First observedget_replay_status
    • First observedget_season_races
    • First observedget_season_standings
    • First observedget_session_analytics
    • First observedget_subscription
    • First observedget_telemetry_driver_laps
    • First observedget_telemetry_lap_comparison
    • First observedget_telemetry_laps
    • First observedget_telemetry_race_summary
    • First observedget_usage
    • First observedget_usage_by_feed
    • First observedget_usage_history
    • First observedget_usage_hourly
    • First observedget_usage_latency
    • First observedget_webhook
    • First observedget_webhook_logs
    • First observedget_webhook_secret
    • First observedlist_circuits
    • First observedlist_constructors
    • First observedlist_drivers
    • First observedlist_events
    • First observedlist_feeds
    • First observedlist_insight_races
    • First observedlist_replay_sessions
    • First observedlist_seasons
    • First observedlist_webhooks
    • First observedprepare_replay
    • First observedrotate_webhook_secret
    • First observedtest_webhook
    • First observedupdate_webhook

TDQS

B3.2/5.0

Scored across 58 tools

Disambiguation3/5

Core resources such as webhooks, drivers, races, and usage are mostly distinct, but the telemetry/analytics area has several overlapping tools: get_telemetry_laps, get_race_telemetry_laps, get_telemetry_driver_laps, and get_telemetry_lap_comparison are easy to confuse. Similarly, get_race_summary, get_telemetry_race_summary, get_session_analytics, and get_race_insights require careful reading to select correctly.

Naming Consistency5/5

Tool names consistently use snake_case with a verb-first pattern such as list_, get_, create_, update_, delete_, prepare_, and rotate_. Despite the large surface, there is no mixing of camelCase or vague standalone names.

Tool Count1/5

With 58 tools, the surface is far beyond a well-scoped set and includes many plan-gated variants and overlapping telemetry/analytics endpoints. This volume creates a large selection burden even though the underlying domain is broad.

Completeness4/5

Coverage is broad and lifecycle-oriented: webhook CRUD, testing, logs, secrets, rotation, usage, billing, replays, F1 data, telemetry, analytics, live sessions, and fantasy outputs are all represented. Minor gaps remain around account/subscription management and webhook delivery retry/resend operations.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that provides 118+ Formula 1 analytics tools, enabling race analysis, driver comparisons, telemetry exploration, and strategy simulation through natural language.
    MIT
  • A
    license
    C
    quality
    D
    maintenance
    Enables AI assistants to access real-time iRacing telemetry, race information, camera control, pit operations, and replay features through the MCP protocol.
    17
    1
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    MCP server for motorsport event documents, enabling AI agents to search, read, compare amendments, and parse schedules via typed tools.
    9
    -
  • A
    license
    B
    quality
    D
    maintenance
    MCP server that provides F1 telemetry analysis, tyre degradation modeling, and pit strategy recommendations, delivering race engineer-style calls grounded in real data. It exposes tools for degradation fits, fuel correction, and strategy reasoning via LangGraph.
    4
    MIT