Skip to main content
Glama

sportiq-mcp

CI PyPI Python License: MIT MCP Registry

MCP server that turns any AI assistant into a sports analyst across FIFA World Cup 2026 football, Formula 1, and IPL cricket — 44 AI-callable tools.

SportIQ demo — Claude calling football_simulate_bracket for World Cup 2026 title probabilities

SportIQ running live in Claude — Monte Carlo World Cup bracket, F1 pit strategy, and Dream11 optimisation, each a visible MCP tool call. (1-min demo)

Every tool is free to use — the three flagships and everything in the INTEL columns below have no SportIQ paywall or account requirement. Live/provider-backed data still depends on the keys and quota available to the host or local operator. If SportIQ is useful to you, sponsor the project to support ongoing development.

What it does

Raw-data tools are table stakes; the intelligence layer is the product. Three flagships:

  • football_simulate_bracket — Monte Carlo with Poisson xG over the 48-team WC 2026 format → per-team round + title probabilities.

  • f1_predict_pit_strategy — tyre-degradation model on OpenF1 telemetry → optimal stop laps + compound sequence.

  • cricket_build_dream11_team — PuLP constraint solver → a valid fantasy XI under credit/role/team caps.

Tools (44 total)

Sport

RAW data

INTEL

Football (WC 2026)

groups, fixtures, standings, squad, match stats, top scorers, odds

xg_model, match_predictor, simulate_group, simulate_bracket, knockout_path, form_trends, find_value_bets, build_accumulator

F1

sessions, drivers, lap_times, standings, race_results, weather

tyre_degradation, undercut_window, head_to_head_pace, weather_strategy_impact, qualifying_analysis, race_pace_compare, predict_pit_strategy

Cricket (IPL)

live_matches, scorecard, points_table, schedule, squad, live_odds

build_dream11_team, captain_recommendation, differential_picks, player_form_index, pitch_report, head_to_head, player_matchup, find_value_bets

Cross-sport

build_accumulator

Plus sportiq_health (included in the 44; cache backend + per-adapter status and remaining API quota).

Data sources (per chain, with keyless fallbacks): football → API-Footballfootball-data.org → bundled wc2026.json. F1 → OpenF1Jolpicafastf1. Cricket → CricAPI + static seeds (NDTV/Cricbuzz scrapers opt-in).

Related MCP server: oraclaw-mcp-server

Where it works

Anywhere that speaks MCP — Claude (Desktop + web), ChatGPT, Cursor, and any MCP client. Two ways to run it:

  • Hosted (no install): add a custom connector — works in claude.ai web & ChatGPT.

  • Local (uvx/Desktop config/IDEs): install from PyPI.

How it works

Hosted — no install

A public instance runs on the home server behind Cloudflare. Add this as a custom connector with No authentication:

https://sportiq.utkarshgupta.org/mcp

Hosting history (GCP Cloud Run → home server): docs/wiki/findings/product-hosting-arc.md. Old *.run.app connector URLs are gone.

  • claude.ai (web): Settings → Connectors → Add custom connector → paste URL → Save.

  • ChatGPT: Settings → Apps & Connectors → enable Developer mode → Create app (MCP) → paste URL → No authentication → Connect.

All 44 tools register on the plain URL. Whether a live/provider-backed call can return current data depends on the credentials, quota, and fallbacks available to the hosted operator; the repository does not claim the public instance's current key inventory.

Mode

What is available

Hosted

All tools register; live/provider-backed results depend on the host's current keys, quota, and fallbacks.

Local, keyless

All tools register; bundled seeds and keyless sources work where supported, while credential-only live sources are skipped.

Local, BYO keys

The same tools can use the configured providers for fresher/live data, subject to provider quota.

The hosted HTTP boundary rejects request bodies over 1 MiB, limits traffic to 60 requests per client and 300 total requests per minute, and permits at most two concurrent expensive model/solver calls. These counters are per process, so the home-server Compose stack runs one replica (always-on idle; no scale-to-zero).

Local install

uvx sportiq-mcp                       # from PyPI
# or from source:
git clone https://github.com/Ninjabeam20/SportIQ-MCP && cd sportiq-mcp
uv sync --extra dev --extra analytics && uv run python -m sportiq.server

Claude Desktop config:

{
  "mcpServers": {
    "sportiq": {
      "command": "uvx",
      "args": ["sportiq-mcp"],
      "env": {
        "CRICAPI_KEY": "your_cricapi_key",
        "APIFOOTBALL_KEY": "your_apifootball_key",
        "THEODDS_KEY": "your_theodds_key"
      }
    }
  }
}

The server boots and registers every tool without keys. Seed/keyless fallbacks and the intelligence layer work where their required inputs are available; provider keys add fresher/live sources and quota rather than unlocking a separate paid tool tier.

Var

Unlocks

Free tier

APIFOOTBALL_KEY

Live football fixtures / standings / squads / scorers

100 req/day

THEODDS_KEY

Market odds (football + cricket probability tools)

500 req/month

FOOTBALLDATA_KEY

football-data.org fallback (token optional)

10 req/min

CRICAPI_KEY

Live cricket scores / scorecards / schedules / squads

100 req/day

RAPIDAPI_KEY

Paid Cricbuzz fallback (player career stats)

plan-dependent

SPORTIQ_ENABLE_NDTV / SPORTIQ_ENABLE_CRICBUZZ

Opt-in cricket scrapers (off by default — ToS)

REDIS_URL

Shared cache backend (defaults to local diskcache)

SPORTIQ_TRANSPORT

stdio (default, local) or http (remote / home server)

macOS arm64: the Dream11 solver needs CBC — brew install cbc (the binary bundled with PuLP is x86-only).

Self-host

Set SPORTIQ_TRANSPORT=http and the server serves the MCP endpoint at /mcp (binds 0.0.0.0:$PORT). A ready-to-build Dockerfile and home-server docker-compose.yml are included. cloud.md is the old Cloud Run runbook (historical). With your own keys set, the live-score and odds tools come online too.

Support SportIQ

Every tool is free and open source — the raw-data tools, sportiq_health, and the full intelligence layer (the three flagships + everything in the INTEL columns). SportIQ has no paid feature gate; provider-backed data can still require operator credentials and quota.

If SportIQ saves you time, sponsor the project at github.com/sponsors/Ninjabeam20 to help fund hosting and ongoing development. It's a voluntary donation — you get the same fully-unlocked server either way.

Is it safe?

  • Open source, MIT licensed, published on PyPI with signed build attestations — read the code before you connect it.

  • Read-only. Tools only fetch and analyse public sports data — no write, delete, payment, email, or file-system tools.

  • Limited operational telemetry. HTTP mode logs client software name/version, User-Agent, tool name, outcome, latency, selected source, and staleness. The public host (Dell) can persist tool_call / mcp_request lines to a local JSONL volume. Local stdio emits local logs but sends no telemetry to a SportIQ-hosted service.

  • Hosted abuse controls. HTTP POST bodies are capped at 1 MiB; requests are limited to 60/client/minute and 300/process/minute; the five expensive simulation/strategy/solver tools share a concurrency limit of two.

  • Credential-aware. A hosted operator may configure provider credentials; the repository does not claim the public instance's current key inventory. Keys are redacted from application logs and envelopes.

  • Historical automated AI code-review results are documented in SECURITY.md; they are not a current third-party certification.

Every response carries a meta.is_stale flag + data age, so the AI tells you how fresh each answer is. Live scores refresh ~30s, F1 telemetry ~10s, standings ~10min, fixtures ~6h.

Develop

uv sync --extra dev --extra analytics   # always both extras: dev = pytest/ruff, analytics = the dashboard's GCP libs
uv run pytest
uv run ruff check .
npx @modelcontextprotocol/inspector uv run python -m sportiq.server

Analytics dashboard (read-only local usage view — Dell JSONL / archived GCP / PyPI / GitHub). Same setup as above, then just run it:

uv run python scripts/dashboard.py     # writes dashboard.html and opens it; GITHUB_TOKEN optional (Sponsors panel)

Note: the dashboard's HTML template (scripts/dashboard_template.html) is currently local-only maintainer tooling, so a fresh clone can't render it yet.

Repository layout: src/ is the MCP server (published to PyPI, hosted on the Dell at https://sportiq.utkarshgupta.org/mcp); website/ is the Next.js marketing site deployed to Vercel. The two ship independently — website/ is excluded from the Python package and the backend container.

See CLAUDE.md for collaboration rules and docs/index.md for the wiki entry point.

Data sources & credits

SportIQ derives some model constants offline from open datasets. Raw datasets are never shipped or fetched at runtime — only small derived seeds (circuits.json, venues.json, elo_seed.json) are committed.

License & author

Created and maintained by Utkarsh Gupta (@Ninjabeam20). Licensed under the MIT License — © 2026 Utkarsh Gupta. Canonical package: sportiq-mcp on PyPI / io.github.Ninjabeam20/sportiq-mcp in the official MCP registry.

Available Tools

44 tools
cricket_build_dream11_teamA
Read-onlyIdempotent
Inspect

Recommend an optimal fantasy XI + captain + vice-captain for one fixture.

Args: match_id: CricAPI match identifier; resolves team_a/team_b/venue automatically. team_a: First team code/name (e.g. MI). Required if match_id is absent. team_b: Second team code/name (e.g. CSK). Required if match_id is absent. venue: Venue key/name (e.g. wankhede). Required if match_id is absent. strategy: "balanced" only in Phase 2; future variants reserved.

Returns: data.players: 11 picked players with name/role/credits/team/projected_points. data.captain: name of the chosen captain. data.vice_captain: name of the chosen VC. data.total_credits: sum of credits used (<= 100). data.total_projected_points: fantasy points including C x2 and VC x1.5 boosts. meta.estimated: true — projections are model output, not a fantasy oracle.

Example: cricket_build_dream11_team(team_a="MI", team_b="CSK", venue="wankhede") cricket_build_dream11_team(match_id="abc123")

ParametersJSON Schema
NameRequiredDescriptionDefault
venueNoVenue key/name (e.g. ``wankhede``). Required if match_id is absent.
team_aNoFirst team code/name (e.g. ``MI``). Required if match_id is absent.
team_bNoSecond team code/name (e.g. ``CSK``). Required if match_id is absent.
match_idNoCricAPI match identifier; resolves team_a/team_b/venue automatically.
strategyNo``"balanced"`` only in Phase 2; future variants reserved.balanced

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds that projections are model output (meta.estimated: true) and notes credit constraints (total_credits <= 100). It also details the return structure including boosts. No contradiction with annotations.

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?

Well-structured with Args, Returns, and Example sections. The description is moderately lengthy but each sentence adds value. The main purpose is front-loaded. Could tighten the strategy description slightly, but overall efficient.

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?

Given an output schema is present (context signals), the description covers all input parameters and describes the output structure in detail (players, captain, vice_captain, credits, projected points, meta note). No obvious gaps for a team-building tool.

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?

Schema coverage is 100%, with all parameters documented. The description reinforces and extends the schema by explaining the relationship between match_id and team_a/team_b/venue (mutual exclusivity) and noting future strategy variants. This adds practical context beyond the raw schema.

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 clearly states it recommends an optimal fantasy XI plus captain and vice-captain for one fixture. It uses a specific verb ("Recommend") and identifies the resource (fantasy team). It distinguishes from siblings like cricket_captain_recommendation (which focuses only on captain) and cricket_differential_picks.

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?

Explicitly explains two input modes: using match_id alone or providing team_a, team_b, and venue together. It states when each parameter is required ("Required if match_id is absent"). However, it does not directly advise when to use this tool over alternatives like cricket_captain_recommendation, though the purpose differs.

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

cricket_captain_recommendationA
Read-onlyIdempotent
Inspect

Return the top-3 captain candidates ranked by projected points.

Args: match_id: CricAPI match identifier; resolves team_a/team_b/venue automatically. team_a: First team code/name. Required if match_id is absent. team_b: Second team code/name. Required if match_id is absent. venue: Venue key/name. Required if match_id is absent.

Returns: data.candidates: list of 3 dicts with name/role/team/projected_points. meta.source: model:captain_score. meta.estimated: true.

ParametersJSON Schema
NameRequiredDescriptionDefault
venueNoVenue key/name. Required if match_id is absent.
team_aNoFirst team code/name. Required if match_id is absent.
team_bNoSecond team code/name. Required if match_id is absent.
match_idNoCricAPI match identifier; resolves team_a/team_b/venue automatically.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations indicate readOnlyHint, idempotentHint, and destructiveHint false, so the tool is safe. The description adds that it automatically resolves venue from match_id and details the return structure (data.candidates, meta). No contradiction.

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 concise, front-loaded with the main purpose, and well-structured with Args and Returns sections. Every sentence adds value without redundancy.

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 4 parameters, no required, and output schema implied, the description covers the output format and essential usage. It could mention if the match must be live or upcoming, but overall it's 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?

Schema coverage is 100%, but the description adds dependency logic (match_id vs. team parameters) not present in the schema. This goes beyond the baseline 3 by clarifying usage constraints.

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 clearly states 'Return the top-3 captain candidates ranked by projected points,' which specifies the verb and resource. Among sibling tools like cricket_build_dream11_team and cricket_differential_picks, this tool's unique purpose is evident.

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 description explains the conditional dependency between match_id and team_a/team_b/venue, stating 'Required if match_id is absent.' This provides clear parameter guidance but does not explicitly compare to sibling tools for when to use this recommendation.

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

cricket_differential_picksA
Read-onlyIdempotent
Inspect

Suggest low-ownership picks with positive projected upside.

Ownership is estimated — proxied by credit weight (lower-credit players tend to have lower ownership), not real ownership data. Flagged estimated: true in the response.

Args: match_id: CricAPI match identifier; resolves team_a/team_b/venue automatically. team_a: First team code/name. Required if match_id is absent. team_b: Second team code/name. Required if match_id is absent. venue: Venue key/name. Required if match_id is absent. ownership_threshold: percent ownership cap; affects estimated label.

Returns: data.picks: list of {name, role, team, credits, projected_points, estimated_ownership_pct}. meta.source: model:captain_score (filtered). meta.estimated: true.

ParametersJSON Schema
NameRequiredDescriptionDefault
venueNoVenue key/name. Required if match_id is absent.
team_aNoFirst team code/name. Required if match_id is absent.
team_bNoSecond team code/name. Required if match_id is absent.
match_idNoCricAPI match identifier; resolves team_a/team_b/venue automatically.
ownership_thresholdNopercent ownership cap; affects estimated label.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already mark readOnlyHint true, but the description adds critical behavioral context: ownership is estimated via credit weight, not real data, and is flagged as 'estimated: true' in the response. This goes beyond what annotations provide.

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 well-structured with a summary line, estimation note, and parameter docs. It is concise and front-loaded, though it could be slightly tighter by removing duplicate parameter descriptions.

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?

Given the tool's complexity (5 parameters, estimation nuance, output schema), the description covers purpose, usage, behavioral details, parameters, and return structure comprehensively. It is fully adequate for an agent to use 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 description coverage is 100%, so the baseline is 3. The description's Args section mostly repeats schema descriptions with minor additional context (e.g., ownership_threshold affecting estimated label). No significant added meaning.

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 opens with 'Suggest low-ownership picks with positive projected upside,' which is a clear verb+resource combination. It is distinct from sibling tools like cricket_captain_recommendation and cricket_find_value_bets.

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 description states the tool is for differential picks and clarifies the ownership estimation methodology. It does not explicitly list when not to use it or directly compare to siblings, but the context is clear enough for an agent to decide.

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

cricket_find_value_betsA
Read-onlyIdempotent
Inspect

Compare model probabilities against market-implied IPL odds. Requires THEODDS_KEY.

NOTE: cricket has no calibrated team-strength model wired yet (unlike the football Elo/Poisson path), so this tool currently returns an EMPTY value_bets list — scoring an edge against a neutral 50/50 prior would flag every market underdog, which would be misleading. It still reports how many events were screened so callers know odds were available. For raw de-vigged prices use cricket_get_live_odds. Real edge detection lands when a cricket win model is wired (see cricket_head_to_head).

Args: team: Optional team name to filter events (case-insensitive substring). Omit to scan every IPL odds event. min_edge: Minimum edge (model_prob - devigged_market_prob), 0..1. Default 0.05. Currently informational only (no bets emitted).

Returns: data.value_bets: always [] until a cricket model is wired. data.events_analysed: count of events screened (both teams present). data.model: "neutral_baseline". data.note: why no bets are emitted. meta.estimated: true.

ParametersJSON Schema
NameRequiredDescriptionDefault
teamNoOptional team name to filter events (case-insensitive substring). Omit to scan every IPL odds event.
min_edgeNoMinimum edge (model_prob - devigged_market_prob), 0..1. Default 0.05. Currently informational only (no bets emitted).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations (readOnlyHint, openWorldHint, idempotentHint, destructiveHint) are consistent and description adds critical context: empty results, neutral baseline, events_analysed count, and reasoning. No contradiction.

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 well-structured with a clear purpose, note, args, and returns. It is front-loaded and concise for the complexity, though slightly verbose with the NOTE section.

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?

Given the output schema exists, the description explains the empty list, events_analysed, model, and note. It covers all relevant behaviors and meta information, making it 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?

Schema coverage is 100%, so the description's parameter info is largely redundant. However, it adds context for min_edge ('Currently informational only'), which adds some value beyond schema descriptions.

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 clearly states the tool 'Compare model probabilities against market-implied IPL odds' with a specific verb and resource. It distinguishes from siblings like cricket_get_live_odds and mentions a required key.

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

Usage Guidelines5/5

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

Explicitly notes the current limitation (empty list until model is wired) and provides an alternative: 'For raw de-vigged prices use cricket_get_live_odds'. Also explains behavior for filtering with team and min_edge.

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

cricket_get_live_matchesA
Read-onlyIdempotent
Inspect

Return all currently live cricket matches across all series.

Returns: data.matches: list of live match objects (team names, score, status). meta.source: which adapter served the response. meta.is_stale: true if data is from stale cache.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds return structure details (data.matches, meta.source, meta.is_stale) beyond annotations, providing useful behavioral context.

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

Conciseness5/5

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

The description is short, front-loaded with the purpose, and every line adds value. There is no redundancy or unnecessary detail.

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 simple read-only tool with no parameters and a clear output schema, the description is complete. It explains the return fields and meta information, leaving no gaps.

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?

Tool has no parameters, so the description does not need to add parameter information. The description adequately covers the return structure, which is particularly helpful given the output schema exists.

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 clearly states it returns all currently live cricket matches across all series, with a specific verb and resource. It distinguishes from siblings like cricket_get_schedule and cricket_get_scorecard.

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 description implies usage for live matches across all series, but does not explicitly mention when not to use it or point to alternatives. However, the context of sibling tools makes it reasonably clear.

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

cricket_get_live_oddsA
Read-onlyIdempotent
Inspect

Return live market head-to-head odds for upcoming/live IPL matches.

Sourced from The Odds API (requires THEODDS_KEY). Without a key the call returns a clean ALL_SOURCES_FAILED envelope rather than crashing.

Args: team: Optional team name to filter events (case-insensitive substring, matched against both sides). Omit to return every IPL event. The Odds API uses its own opaque event ids, so a CricAPI match_id cannot be resolved to an event yet — filtering is by team name.

Returns: data.events: list of {event_id, home, away, commence_time, bookmakers: [{name, home, away}]} with decimal h2h prices per bookmaker. meta.source: adapter that served the data (theodds / cache:stale).

ParametersJSON Schema
NameRequiredDescriptionDefault
teamNoOptional team name to filter events (case-insensitive substring, matched against both sides). Omit to return every IPL event. The Odds API uses its own opaque event ids, so a CricAPI match_id cannot be resolved to an event yet — filtering is by team name.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4.7/5.0
Behavior5/5

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

The description discloses that it requires an API key and returns a clean error envelope if missing. Annotations already provide readOnlyHint=true, and the description adds context about external source and caching behavior (meta.source). No contradictions.

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 well-structured with clear sections for Args and Returns. It is concise but includes necessary details. A minor deduction for slight verbosity in the parameter explanation, but overall efficient.

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?

Given that an output schema exists (context confirms), the description still provides the return structure explicitly. It covers input, output, error handling, and source. Complete for an AI agent to use correctly.

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

Parameters5/5

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

The only parameter 'team' is thoroughly explained in the description: case-insensitive substring matching against both sides, and the limitation that CricAPI match_id cannot be used due to opaque event ids. This adds meaning beyond the schema, which already included the same description.

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 clearly states it returns live market head-to-head odds for IPL matches. It uses specific verb 'Return' and resource 'live market head-to-head odds', distinguishing it from siblings like cricket_get_live_matches or football_get_odds.

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 description explains when to use it (for IPL odds) and mentions the requirement of THEODDS_KEY. It doesn't explicitly state when not to use or list alternatives, but the context from sibling tools and the specific IPL focus make usage clear.

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

cricket_get_pitch_reportA
Read-onlyIdempotent
Inspect

Summarise pitch characteristics for a venue.

Args: venue: Venue key (e.g. wankhede), official name, or city.

Returns: data: {batting_friendly 0..1, expected_first_inn, recommendation, venue, pitch_type}. meta.source: which adapter served the venue record.

ParametersJSON Schema
NameRequiredDescriptionDefault
venueYesVenue key (e.g. ``wankhede``), official name, or city.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false. The description adds return format details but does not significantly extend behavioral disclosure beyond the annotations.

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 concise, with a clear two-section format (Args, Returns). It includes necessary information without extraneous text, though the structured docblock style could be slightly more compact.

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?

Given the tool has a single parameter, comprehensive annotations, and an output schema, the description is fully adequate. It explains input, output, and behavior without 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?

The input schema has 100% coverage with description for the venue parameter. The main description adds no additional meaning beyond what the schema provides, warranting the baseline score of 3.

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 clearly states the tool summarizes pitch characteristics for a venue, using specific verb and resource. It distinguishes from sibling tools like get_scorecard or get_squad which serve different purposes.

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

Usage Guidelines4/5

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

The description provides clear context on when to use (summarize pitch characteristics for a venue), but does not explicitly state when not to use or provide alternatives. However, given the distinct nature among siblings, it is sufficient.

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

cricket_get_points_tableA
Read-onlyIdempotent
Inspect

Return the points table / standings for a cricket series.

Args: series_id: The series identifier (e.g. IPL 2026 series ID from CricAPI).

Returns: data: points table rows with team, P, W, L, NRR, Points. meta.source: adapter that served the data.

ParametersJSON Schema
NameRequiredDescriptionDefault
series_idYesThe series identifier (e.g. IPL 2026 series ID from CricAPI).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4/5.0
Behavior4/5

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

Annotations (readOnlyHint, idempotentHint, destructiveHint) already cover safety. The description adds behavioral context by specifying the return fields (team, P, W, L, NRR, Points) and meta.source, though it does not mention potential empty results or error scenarios.

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 extremely concise and well-structured with clear Args and Returns sections. Every sentence serves a purpose with no redundancy.

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?

Given the presence of an output schema (as indicated), the description is largely complete for a simple lookup tool. It covers the main return fields and the required parameter. Minor gaps include no mention of how to obtain the series_id or handle errors.

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 parameter description in the tool description is identical to the schema description ('The series identifier...'). No additional meaning or usage guidance is provided beyond the schema.

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 explicitly states the tool returns the points table/standings for a cricket series, using a specific verb and resource. It is clearly distinct from sibling tools like get_scorecard or get_squad.

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 does not provide explicit guidance on when to use this tool versus alternatives (e.g., get_schedule for series IDs, get_scorecard for match details). The context is implied but not stated.

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

cricket_get_scheduleA
Read-onlyIdempotent
Inspect

Return the upcoming match schedule, optionally filtered by series.

Args: series_id: Optional. Filter to a specific series. If omitted, returns all upcoming fixtures across all active series. limit: Max matches to return, 1..200 (default 50). offset: Number of matches to skip for paging (default 0).

Returns: data.matches: page of upcoming matches with teams, date, venue. data.pagination: {total, count, offset, limit, has_more, next_offset}. meta.source: adapter that served the data.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax matches to return, 1..200 (default 50).
offsetNoNumber of matches to skip for paging (default 0).
series_idNoOptional. Filter to a specific series. If omitted, returns all upcoming fixtures across all active series.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4.5/5.0
Behavior4/5

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

Beyond annotations (readOnlyHint, idempotentHint), description adds pagination details, return fields (teams, date, venue), and meta.source, enhancing transparency.

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?

Description is structured with Args and Returns sections, concise at ~10 lines, every sentence adds value, no fluff.

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?

Given all parameters are described and output schema exists, the description fully covers what the tool does, including pagination and return fields.

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?

Schema coverage is 100%, but description adds output structure and contextual meaning (e.g., pagination fields), which adds value beyond bare schema descriptions.

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 clearly states it returns the upcoming match schedule, optionally filtered by series, which distinguishes it from siblings like cricket_get_live_matches (live matches) and other tools.

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?

Provides explicit guidance on optional parameters (series_id, limit, offset) and default behavior, but doesn't mention when to use this tool over alternatives besides the implicit context.

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

cricket_get_scorecardA
Read-onlyIdempotent
Inspect

Return the full scorecard for a specific match.

Args: match_id: The match identifier (e.g. from cricket_get_live_matches).

Returns: data: full scorecard with innings, partnerships, bowling figures. meta.source: adapter that served the data.

ParametersJSON Schema
NameRequiredDescriptionDefault
match_idYesThe match identifier (e.g. from cricket_get_live_matches).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, etc. The description adds useful detail about return content (innings, partnerships, bowling figures) without contradicting annotations.

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 extremely concise: two sentences plus argument/return formatting. Every word serves a purpose, and the main action is front-loaded.

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 tool with one parameter and an output schema, the description covers the purpose and return shape. Minor improvements could mention source adapter, but completeness is strong.

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 parameter 'match_id' is fully described in the schema. The description only repeats this, adding no new semantic value. Schema coverage is 100%, so baseline score of 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?

The description explicitly states 'Return the full scorecard for a specific match', using a specific verb and resource. It clearly distinguishes from siblings like 'cricket_get_live_matches' which only list matches.

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 description notes that the match_id comes from 'cricket_get_live_matches', providing implicit context. However, it does not explicitly state when to use this tool vs alternative cricket data tools.

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

cricket_get_squadA
Read-onlyIdempotent
Inspect

Return the squad roster for a cricket team, optionally for a specific series.

Args: team: Team code or name (e.g. "MI", "CSK", "IND", "AUS"). series_id: Optional. Series ID to pull the tournament-specific squad. If omitted, falls back to static seed data.

Returns: data.players: list of players with name, role, and credits. meta.source: adapter that served the data (cricapi / static_seed).

ParametersJSON Schema
NameRequiredDescriptionDefault
teamYesTeam code or name (e.g. "MI", "CSK", "IND", "AUS").
series_idNoOptional. Series ID to pull the tournament-specific squad. If omitted, falls back to static seed data.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, open-world. Description adds return format (players with fields, meta.source) and fallback logic, exceeding annotation 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?

Well-structured with Args, Returns, bullet points; no redundant sentences.

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?

Given output schema exists and sibling tools cover other aspects, description fully explains squad retrieval without missing details.

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?

Schema coverage is 100% but description adds context like 'static seed data' fallback, enhancing understanding beyond schema.

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?

Clear verb 'return' with resource 'squad roster', distinguishes from sibling tools like get_live_matches or get_scorecard.

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?

States required and optional parameters, explains fallback behavior, but doesn't explicitly guide when to use vs alternatives.

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

cricket_head_to_headA
Read-onlyIdempotent
Inspect

Compare two cricket teams head-to-head using squad form and player stats.

Args: team_a: First team code or name (e.g. "MI", "India"). team_b: Second team code or name (e.g. "CSK", "Australia").

Returns: data: {team_a, team_b, team_a_edge_count, team_b_edge_count, key_players_a, key_players_b, h2h_win_rate_a, h2h_win_rate_b, win_prob_a, win_prob_b}. meta.estimated: true.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_aYesFirst team code or name (e.g. "MI", "India").
team_bYesSecond team code or name (e.g. "CSK", "Australia").

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive. The description adds behavioral context: it uses squad form and player stats, and explicitly notes 'meta.estimated: true' indicating the results are estimations/probabilities. This goes beyond the annotation schema.

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 concise with a clear purpose statement and structured Args/Returns sections. It adds necessary detail without fluff. A minor point: listing return fields may be redundant given output schema exists, but it helps quick comprehension.

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?

Given the output schema exists (context signals), the description provides a useful summary of return fields and highlights the estimated nature. It adequately covers the tool's behavior for a read-only comparison tool. Could mention pagination or limitations, but not critical.

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% with descriptions for both parameters. The description essentially repeats the same param info without adding new semantics like format constraints or valid values. Baseline 3 is appropriate as schema does the heavy lifting.

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 clearly states the tool compares two cricket teams head-to-head using squad form and player stats. It distinguishes from siblings like cricket_get_scorecard (which provides match details) and cricket_player_matchup (player vs player). The verb 'compare' is specific and resource is clear.

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 usage for comparing teams, but does not explicitly state when to use this tool over alternatives like cricket_get_scorecard or cricket_player_form_index. No exclusions or when-not-to-use guidance is provided, leaving the agent to infer context from the name and description.

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

cricket_player_form_indexA
Read-onlyIdempotent
Inspect

Report a 0-100 form score for a player using the player_stats chain.

Args: player_id: Upstream player identifier (CricAPI/Cricbuzz id).

Returns: data.form_score: 0..100 indicator. data.trend: "rising" / "stable" / "falling". data.samples: how many recent innings were available. meta.source: which adapter served the underlying stats. meta.estimated: true.

ParametersJSON Schema
NameRequiredDescriptionDefault
player_idYesUpstream player identifier (CricAPI/Cricbuzz id).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds context about using the 'player_stats chain', returning estimated data (meta.estimated: true), and the adapter source, which goes beyond the annotations.

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 well-structured with Args, Returns, and meta sections. It is front-loaded with the main purpose and avoids unnecessary words, though slightly longer than minimal.

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?

Given the low complexity (one parameter, simple output), the description fully explains all return fields (form_score, trend, samples) and meta information, leaving no gaps for an agent.

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 input schema has 100% coverage with a single parameter described identically in both schema and description. The description does not add new meaning beyond the schema, so baseline score of 3 applies.

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 clearly states the verb 'Report' and the specific resource '0-100 form score for a player', distinguishing it from sibling tools that provide different cricket data such as scorecards or matchups.

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 does not explicitly state when to use this tool over alternatives or provide exclusions. It implies usage for obtaining a form score but lacks comparative guidance.

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

cricket_player_matchupA
Read-onlyIdempotent
Inspect

Analyse the head-to-head matchup between two cricket players based on role and career stats.

Args: player_a: Player ID or name for the first player. player_b: Player ID or name for the second player.

Returns: data: {matchup_type, edge_holder, edge_reason, signals, role_a, role_b}. meta.estimated: true — heuristic model, not ball-by-ball H2H data.

ParametersJSON Schema
NameRequiredDescriptionDefault
player_aYesPlayer ID or name for the first player.
player_bYesPlayer ID or name for the second player.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4.1/5.0
Behavior5/5

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

Description adds that results are estimated (heuristic model, not ball-by-ball), complementing annotations (readOnlyHint, idempotentHint, etc.) without contradiction.

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?

Concise with front-loaded purpose; includes Args/Returns sections. Slightly redundant with schema but not overly verbose.

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?

Covers purpose, parameters, returns, and meta. Could elaborate on 'signals' but output schema likely handles it. Adequate given annotations and schema richness.

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% with adequate descriptions. Description does not add extra meaning beyond the schema, so baseline score applies.

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?

Clearly states the tool analyzes head-to-head matchups between two cricket players using role and career stats. Distinguishes from siblings like cricket_head_to_head (team vs team) and cricket_player_form_index (form).

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?

Implies use for career comparison via role and stats, and notes heuristic model, but does not explicitly state when to use over alternatives or when not to use.

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

cross_sport_build_accumulatorA
Read-onlyIdempotent
Inspect

Model the joint probability of multiple outcomes across football and cricket.

Args: legs: Total legs across both sports (2-8). Default 3. min_edge: Minimum edge per leg. Default 0.05.

Returns: data: same shape as football_build_accumulator, with sport field per leg. meta.estimated: true.

ParametersJSON Schema
NameRequiredDescriptionDefault
legsNoTotal legs across both sports (2-8). Default 3.
min_edgeNoMinimum edge per leg. Default 0.05.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already indicate readOnly, idempotent, non-destructive. The description adds that the output has the same shape as football_build_accumulator with a sport field per leg, and meta.estimated is true, which enriches behavioral understanding beyond bare annotations.

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 concise, front-loaded with the purpose, and each sentence (purpose line, args, returns) serves a clear function with no wasted words.

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?

Given the two simple parameters, complete schema, and rich annotations, the description provides sufficient context including output shape and meta flag. It could mention supported sports explicitly but is otherwise adequate.

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?

Input schema covers 100% of parameters with descriptions. The description repeats default values and ranges but does not add new semantic meaning beyond what the schema already provides.

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 clearly states the tool models joint probability across football and cricket. The cross-sport aspect distinguishes it from single-sport siblings like football_build_accumulator, though it does not explicitly contrast them.

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 use for multi-sport accumulators (football and cricket), but provides no explicit guidance on when to use this tool vs alternatives like football_build_accumulator or when not to use it.

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

f1_get_driversA
Read-onlyIdempotent
Inspect

Return driver list for a specific F1 session.

Args: session_key: OpenF1 session identifier.

Returns: data.drivers: list of driver objects with driver_number, full_name, team. meta.source: adapter that served the data.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_keyYesOpenF1 session identifier.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds value by specifying the return structure (list of driver objects with driver_number, full_name, team) and the meta source, going beyond the annotations.

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 extremely concise: one sentence for purpose plus structured Args/Returns sections. No fluff, every sentence adds value. Ideal length for a straightforward tool.

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?

Given the tool's low complexity (1 parameter, no nested objects, schema coverage 100%, output schema exists), the description fully covers what the tool does, what it returns, and the required input. Complete and self-contained.

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% with the parameter session_key described as 'OpenF1 session identifier.' The description repeats the same phrasing, adding no new meaning beyond the schema, so 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?

The description clearly states 'Return driver list for a specific F1 session', specifying the verb (return), resource (driver list), and scope (specific F1 session). It distinguishes from sibling tools like f1_get_race_results or f1_get_standings, which focus on different data.

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 description implies usage with 'for a specific F1 session', indicating the need for a session_key. While it doesn't explicitly state when not to use or name alternatives, the sibling tools cover distinct functions, making usage relatively clear.

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

f1_get_lap_timesA
Read-onlyIdempotent
Inspect

Return lap times for a driver in a specific F1 session.

Args: session_key: OpenF1 session identifier. driver_number: Driver's race number (e.g. 1 for Verstappen). limit: Max laps to return, 1..200 (default 100 — covers most full races). offset: Number of laps to skip for paging (default 0).

Returns: data.laps: page of lap objects with lap_number and lap_duration. OpenF1 does not put compound/tyre_life here — those live on the stints endpoint. data.pagination: {total, count, offset, limit, has_more, next_offset}. meta.source: adapter that served the data.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax laps to return, 1..200 (default 100 — covers most full races).
offsetNoNumber of laps to skip for paging (default 0).
session_keyYesOpenF1 session identifier.
driver_numberYesDriver's race number (e.g. 1 for Verstappen).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4.5/5.0
Behavior5/5

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

Annotations declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds significant behavioral context: it explains the return structure (laps with lap_number and lap_duration), pagination details, and explicitly states what is NOT included (tyre data). This goes well beyond the annotations.

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 well-structured with Args and Returns sections. It is concise, with each sentence providing necessary information. No redundancy.

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?

Given the annotations, 100% schema coverage, and presence of an output schema, the description explains the return format, pagination, and even notes what the API does NOT return (tyre data). It is complete and leaves no ambiguity for an AI agent.

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 schema already documents each parameter. The description restates parameter info and adds minor context (default limit covers most races, offset for paging). This adds some but not substantial value beyond the schema.

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 clearly states 'Return lap times for a driver in a specific F1 session.' It uses a specific verb-resource pair and differentiates from sibling tools like f1_get_race_results or f1_tyre_degradation, which cover different aspects of F1 data.

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 description specifies parameters and provides context on pagination (limit, offset). It implicitly advises against using this for tyre data by stating that compound/tyre_life live on the stints endpoint. However, it does not explicitly state when not to use this tool or suggest alternatives.

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

f1_get_race_resultsA
Read-onlyIdempotent
Inspect

Return the final classification for one F1 race, keyed by year and round.

Args: year: Championship year (e.g. 2025). round: Round number within the season (1-based; e.g. 1 for the opener).

Returns: data.results: Ergast/Jolpica RaceTable payload — finishing order, times, grid positions, points, and fastest laps for the race. meta.source: adapter that served the data.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYesChampionship year (e.g. 2025).
roundYesRound number within the season (1-based; e.g. 1 for the opener).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations (readOnlyHint, idempotentHint, destructiveHint) already convey that this is a safe, read-only operation. Beyond that, the description adds specific return fields (finishing order, times, grid positions, points, fastest laps) and the data source, which provides useful behavioral context.

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

Conciseness5/5

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

The description is concise, well-structured with clear 'Args' and 'Returns' sections, and every sentence serves a purpose. No wasted words.

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?

Given the tool's simplicity (two required parameters, read-only, full schema coverage, annotations, and an output schema), the description adequately covers the tool's purpose, parameters, and return value. No gaps are evident.

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 parameter descriptions in the schema are already detailed. The description repeats the same information ('Championship year (e.g. 2025)') without adding new semantics or constraints beyond what the schema provides.

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 uses specific verbs ('Return the final classification') and clearly identifies the resource ('one F1 race'). It distinguishes itself from sibling F1 tools like f1_get_drivers and f1_get_lap_times by focusing on race results.

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 does not provide explicit guidance on when to use this tool versus alternatives (e.g., f1_get_sessions or f1_get_lap_times). Usage is implied through the parameter description (year and round), but no when-to-use or when-not-to-use context is given.

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

f1_get_sessionsA
Read-onlyIdempotent
Inspect

Return F1 sessions for a given year, optionally filtered by country.

Args: year: Championship year (e.g. 2025). country: Optional country name to filter (e.g. "Monaco").

Returns: data.sessions: list of session objects with session_key, session_type, date. meta.source: adapter that served the data.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYesChampionship year (e.g. 2025).
countryNoOptional country name to filter (e.g. "Monaco").

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, covering safety and idempotency. The description adds behavioral context by detailing the return structure (session objects with fields like session_key, session_type, date) and mentioning the meta.source, which goes beyond annotations.

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 concise, using a clear header and structured Args/Returns sections. Every sentence serves a purpose, with no redundancy. It is well-organized and easy to parse.

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?

Given the tool's simplicity (2 parameters, 1 required), the description fully covers the purpose, parameters, and return values. Annotations provide behavioral transparency. There is no missing information for correct invocation.

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 schema already defines both parameters with examples. The description repeats the schema's parameter descriptions without adding new semantic information. Per guidelines, baseline 3 is appropriate when schema covers parameters well.

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 explicitly states 'Return F1 sessions for a given year, optionally filtered by country.' The verb 'Return' and resource 'F1 sessions' clearly define the action and object. Among many F1 sibling tools, this one uniquely provides session data, distinguishing it well.

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 description specifies when to use the tool: to get sessions by year with an optional country filter. It does not explicitly state when not to use it or mention alternatives, but the context of sibling tools provides implicit guidance. The usage scenario is clear.

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

f1_get_standingsA
Read-onlyIdempotent
Inspect

Return F1 driver and constructor championship standings for a year.

Args: year: Championship year (e.g. 2025).

Returns: data.driver_standings: driver championship positions and points. data.constructor_standings: constructor championship positions and points. meta.source: adapter that served the data.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYesChampionship year (e.g. 2025).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations provide readOnlyHint and idempotentHint. Description adds return structure details (driver_standings, constructor_standings) and meta.source, which is useful beyond annotations. No contradictions.

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?

Description is concise, well-structured with clear Args and Returns sections. Every sentence adds value with no unnecessary text.

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?

Given the tool's simplicity and presence of output schema, the description provides sufficient context including return fields and meta.source. Complete for its purpose.

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 description does not add meaning beyond what the schema provides for the year parameter. Baseline score of 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?

Description explicitly states it returns F1 driver and constructor championship standings for a year, naming specific resources and differentiating from sibling tools like f1_get_drivers and f1_get_race_results.

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?

Indicates usage for a specific year but lacks explicit guidance on when to use versus alternatives or when not to use. Usage is implied but not confirmed.

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

f1_get_weatherA
Read-onlyIdempotent
Inspect

Return weather data for a specific F1 session.

Args: session_key: OpenF1 session identifier.

Returns: data.weather: list of weather snapshots with temperature, rainfall, wind. meta.source: adapter that served the data.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_keyYesOpenF1 session identifier.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate readOnly, idempotent, and non-destructive behavior. The description adds value by detailing the return structure (list of weather snapshots with temperature, rainfall, wind) and the meta.source field. This goes beyond what annotations convey.

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 concise with a clear one-line purpose followed by structured Args and Returns sections. It avoids fluff, though the Returns section could be considered slightly verbose for a simple tool. Overall, it is well-organized.

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?

Given the tool's simplicity (one parameter, output schema present, annotations covering safety), the description fully covers what the tool returns and its source. No gaps are apparent for an agent to correctly invoke the tool.

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% for the single parameter 'session_key', which is already well-documented in the schema description. The description's Args section merely repeats this information, adding no new semantic meaning.

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 clearly states the specific action: 'Return weather data for a specific F1 session.' It identifies the resource (weather data for F1 sessions) and includes a verb (return). Among siblings like f1_get_drivers and f1_weather_strategy_impact, the purpose is distinct and unambiguous.

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 does not explicitly state when to use this tool versus alternatives such as f1_weather_strategy_impact. Usage is implied by the name and purpose, but no guidance on prerequisites or exclusions is provided.

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

f1_head_to_head_paceA
Read-onlyIdempotent
Inspect

Compare lap-time pace distribution between two drivers in a session.

Args: session_key: OpenF1 session identifier. driver_a: First driver's race number. driver_b: Second driver's race number.

Returns: data: {driver_a_avg_s, driver_b_avg_s, delta_s, faster_driver}. meta.estimated: true.

ParametersJSON Schema
NameRequiredDescriptionDefault
driver_aYesFirst driver's race number.
driver_bYesSecond driver's race number.
session_keyYesOpenF1 session identifier.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already indicate readOnly, idempotent, and non-destructive behavior. The description adds that the tool returns estimated averages and delta (meta.estimated: true), disclosing approximation. It also specifies the output structure (avg_s, faster_driver), which goes beyond the annotations. No contradictions.

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 concise: a single purpose sentence followed by Args and Returns. It is front-loaded with the key function. However, the Args section partially duplicates schema descriptions, which is slightly redundant. Still clear and efficient.

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?

Given that an output schema exists (implied by context signals), the description does not need to detail return values. It adequately covers inputs, purpose, and estimation hint. Minor gaps: no mention of error handling or driver existence checks, but acceptable for a simple comparison tool.

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%—each parameter has a clear description identical to the tool description's Args section. The description adds no new semantic value beyond what the schema provides (e.g., no ranges, examples, or constraints). Baseline 3 due to full schema coverage.

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 clearly states the action ('Compare lap-time pace distribution') and the specific resource ('between two drivers in a session'). It is distinct from sibling F1 tools like 'f1_get_lap_times' (raw times) and 'f1_race_pace_compare' (possibly different scope). The verb 'Compare' precisely conveys the tool's function.

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 does not provide explicit guidance on when to use this tool versus alternatives (e.g., 'f1_race_pace_compare'). The purpose is clear, but no when-not-to-use or preferred scenarios are mentioned. Usage must be inferred from the tool name and purpose.

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

f1_predict_pit_strategyA
Read-onlyIdempotent
Inspect

Predict the optimal pit-stop strategy for a driver in an F1 race session.

Args: session_key: OpenF1 session identifier for a recorded race. driver_number: Driver's race number (e.g. 1 for Verstappen). current_lap: Current lap to project from (default 1 = full race ahead). total_laps: Total race laps. If omitted, inferred from the highest observed lap_number in the fetched laps (correct for Monaco 78 / Spa 44), falling back to 57 when no laps are available. An explicit value always wins.

Returns: data.stop_laps: recommended pit laps. data.compound_sequence: tyre compounds for each stint. data.expected_finish_position: currently always None (not modelled). data.confidence: 0.0-1.0 model confidence. meta.total_laps: race length used (explicit arg, else inferred from laps). meta.estimated: true.

Example: f1_predict_pit_strategy(session_key=9158, driver_number=1) f1_predict_pit_strategy(session_key=9158, driver_number=16, current_lap=20, total_laps=78)

ParametersJSON Schema
NameRequiredDescriptionDefault
total_lapsNoTotal race laps. If omitted, inferred from the highest observed lap_number in the fetched laps (correct for Monaco 78 / Spa 44), falling back to 57 when no laps are available. An explicit value always wins.
current_lapNoCurrent lap to project from (default 1 = full race ahead).
session_keyYesOpenF1 session identifier for a recorded race.
driver_numberYesDriver's race number (e.g. 1 for Verstappen).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds behavioral context about inference of total_laps, model confidence, and that expected_finish_position is not modelled. This goes beyond annotations by explaining data dependencies and limitations.

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 well-structured with Args, Returns, and Example sections. It is concise yet comprehensive, front-loading the purpose. Every sentence adds value, and the example illustrates typical use.

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?

Given the tool's complexity (prediction with multiple parameters and return fields), the description covers all inputs, outputs including meta fields, inference fallback, and example usage. The output schema (implied) is complemented by clear return documentation.

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?

Schema coverage is 100%, providing baseline of 3. The description adds significant value by explaining inference logic for total_laps, the default for current_lap, and clarifying that driver_number is the race number. This enriches understanding beyond schema titles.

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 explicitly states the tool predicts 'optimal pit-stop strategy' for a driver, using specific verbs and resource. It clearly distinguishes from sibling tools like f1_tyre_degradation or f1_race_pace_compare by its unique focus on strategy.

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 examples of usage but does not explicitly state when to use this tool versus alternatives, nor does it provide when-not-to-use guidance. The context implies it's for pit strategy, but no exclusions or comparisons are made.

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

f1_qualifying_analysisA
Read-onlyIdempotent
Inspect

Analyse a qualifying session: best lap per driver, gap to pole, projected grid.

Args: session_key: OpenF1 session identifier for a Qualifying session.

Returns: data.grid: [{position, driver_number, full_name, team_name, best_lap_gap_s}]. data.pole_time_s: pole lap duration in seconds. data.drivers_analysed: count of drivers with valid laps. meta.estimated: true — grid derived from session laps, not official timing.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_keyYesOpenF1 session identifier for a Qualifying session.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate readOnly, openWorld, and idempotent behavior. The description adds valuable context: the 'meta.estimated: true' field reveals that the grid is derived from session laps and not official timing, which is critical for understanding result reliability.

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 highly concise and well-structured: a one-line purpose, followed by Args and Returns sections. Every sentence provides clear information without redundancy or fluff.

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?

Given that the tool has an output schema, the description provides a clear summary of return fields (grid, pole_time_s, drivers_analysed, meta) with sufficient context about meta.estimated. It covers the key aspects needed for an agent to understand the tool's functionality.

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 schema description for session_key ('OpenF1 session identifier for a Qualifying session.') matches the description's Args section. The description does not add new semantic meaning beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

The description clearly states the tool's action ('Analyse a qualifying session') and specifies the outputs: best lap per driver, gap to pole, projected grid. It distinguishes itself from siblings like f1_get_lap_times or f1_get_race_results by focusing specifically on qualifying analysis.

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 usage for qualifying sessions by requiring a qualifying session_key and noting that the grid is derived from session laps. However, it does not explicitly state when to use this tool versus alternatives or provide any exclusion criteria.

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

f1_race_pace_compareA
Read-onlyIdempotent
Inspect

Compare race-pace and tyre degradation between two F1 drivers in a session.

Args: session_key: OpenF1 session identifier. driver_a: First driver's race number. driver_b: Second driver's race number.

Returns: data: {by_compound, overall_faster, compounds_compared}. meta.estimated: true — degradation model fit, not official timing.

ParametersJSON Schema
NameRequiredDescriptionDefault
driver_aYesFirst driver's race number.
driver_bYesSecond driver's race number.
session_keyYesOpenF1 session identifier.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, destructiveHint false, and idempotentHint true. The description adds valuable behavioral context by stating that 'meta.estimated: true — degradation model fit, not official timing,' indicating the output is a model estimate. No contradictions with annotations.

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 very concise: three lines for the overall purpose, then Args and Returns sections. Every sentence is necessary, no redundancy. The structure is clear and easy to parse.

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 tool that compares two drivers per session and returns compound-wise data, the description provides key context: it's an estimated model, not official timing. The return structure hints at the data shape. Given that an output schema exists (not shown), the description is sufficient but could elaborate on what 'overall_faster' and 'compounds_compared' imply.

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?

Schema coverage is 100% with each parameter having a description. The description adds structure by listing parameters and their types in the Args block, and clarifies the return shape with a brief outline of the data fields. This goes beyond the schema by providing a high-level view of what the output contains.

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 uses a specific verb ('Compare') and clearly identifies the resource ('race-pace and tyre degradation between two F1 drivers in a session'). It distinguishes from siblings like f1_tyre_degradation and f1_head_to_head_pace by focusing on pairwise comparison with compound breakdown.

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 the function's purpose but does not provide explicit guidance on when to use this tool versus alternatives such as f1_head_to_head_pace. No when-not-to-use or prerequisite conditions are mentioned, leaving the agent to infer usage context.

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

f1_tyre_degradationA
Read-onlyIdempotent
Inspect

Fit a tyre degradation model for a driver + compound in a session.

Args: session_key: OpenF1 session identifier. driver_number: Driver's race number. compound: Tyre compound (SOFT, MEDIUM, HARD, INTER, WET).

Returns: data: {intercept, slope, residual_std, sample_count}. meta.estimated: true — model output, not telemetry oracle.

ParametersJSON Schema
NameRequiredDescriptionDefault
compoundYesTyre compound (SOFT, MEDIUM, HARD, INTER, WET).
session_keyYesOpenF1 session identifier.
driver_numberYesDriver's race number.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint. Description adds valuable context: 'meta.estimated: true — model output, not telemetry oracle.' This clarifies the tool returns a fitted model, not raw data.

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?

Description is concise (5 lines), well-structured with 'Args:' and 'Returns:' sections. Every sentence adds value; no fluff.

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?

Given the tool's moderate complexity and the presence of both annotations and output schema description, the description fully explains what the tool does, its parameters, and what it returns. No 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 description coverage is 100%, so baseline is 3. The description repeats parameter names and types but adds no new semantic detail beyond what the schema already provides.

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 uses specific verb 'Fit' and identifies resource 'tyre degradation model' with clear scope 'driver + compound in session'. It distinguishes from sibling F1 tools like f1_get_lap_times which return raw data.

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 explicit guidance on when to use this tool versus alternatives. The description does not mention when not to use it or provide context for choosing among sibling tools.

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

f1_undercut_windowA
Read-onlyIdempotent
Inspect

Estimate whether an undercut is viable for the attacker against the target.

Args: session_key: OpenF1 session identifier. attacker_number: Attacking driver's race number. target_number: Target driver's race number. current_lap: Current lap number in the race.

Returns: data: {laps_to_clear, viable, marginal}. meta.estimated: true.

ParametersJSON Schema
NameRequiredDescriptionDefault
current_lapYesCurrent lap number in the race.
session_keyYesOpenF1 session identifier.
target_numberYesTarget driver's race number.
attacker_numberYesAttacking driver's race number.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint. The description adds return structure (laps_to_clear, viable, marginal) and meta.estimated flag, providing extra behavioral context beyond annotations.

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?

Description is concise with a clear one-sentence purpose followed by structured args and returns. Slightly redundant due to repeating schema info, but still efficient.

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?

The description covers key purpose, parameters, and return fields. Since an output schema exists, it doesn't need to detail return values fully. Adequate for the tool's complexity.

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 description repeats parameter names/descriptions from schema without adding new meaning. 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?

The description clearly states the tool estimates undercut viability for attacker against target, with specific verb 'estimate' and resource 'undercut window'. It distinguishes from siblings like f1_predict_pit_strategy and f1_tyre_degradation.

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 usage for undercut analysis but does not explicitly state when to use it versus alternative F1 pit strategy tools or provide exclusion criteria.

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

f1_weather_strategy_impactA
Read-onlyIdempotent
Inspect

Analyse weather data and recommend compound or pit-window adjustments.

Args: session_key: OpenF1 session identifier.

Returns: data: {has_rain, avg_track_temp_c, compound_recommendation, recommendation}. meta.estimated: true.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_keyYesOpenF1 session identifier.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, so the tool is safe and idempotent. The description adds value by specifying the return structure (has_rain, avg_track_temp_c, compound_recommendation, recommendation) and noting that meta.estimated is true, indicating the output is a model estimate. This enhances transparency beyond the annotations.

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 concise with two main sentences and a structured Args/Returns block. It is front-loaded with the main purpose. The Returns section provides valuable output details. However, the Args section repeats the schema description, which is slightly redundant but not harmful.

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?

Given the tool's focus on weather-driven strategy recommendations, the description covers the input (session_key), the analysis performed, and the output structure. However, it does not explain edge cases, such as sessions with no weather data, or how the recommendation is derived. With rich annotations and a single parameter, the description is mostly complete for a tool of this complexity.

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 parameter session_key is described in both the schema and the tool description identically as 'OpenF1 session identifier.' Since schema coverage is 100%, the description adds no new semantic information about the parameter. Baseline score of 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 clearly states it analyzes weather data and recommends compound or pit-window adjustments, which is specific and action-oriented. It distinguishes itself from siblings like f1_get_weather (which only provides weather data) and f1_predict_pit_strategy (which may not incorporate weather as directly), though it could be more explicit about the unique value proposition.

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 provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, when not to use it, or comparison with similar tools like f1_undercut_window or f1_predict_pit_strategy. This lack of usage context reduces its helpfulness for an agent deciding between tools.

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

football_build_accumulatorA
Read-onlyIdempotent
Inspect

Model the joint probability of several match outcomes from the top model-vs-market gaps.

Calls football_find_value_bets internally to fetch live odds, then selects the strongest legs and combines them under the joint-probability model.

Args: legs: Number of legs (2-8). Default 3. min_edge: Minimum edge threshold per leg. Default 0.05.

Returns: data: {legs, legs_used, combined_odds, combined_model_prob, combined_edge, risk_flag, independence_warning}. meta.estimated: true.

ParametersJSON Schema
NameRequiredDescriptionDefault
legsNoNumber of legs (2-8). Default 3.
min_edgeNoMinimum edge threshold per leg. Default 0.05.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations (readOnlyHint, openWorldHint, idempotentHint) are consistent. The description adds key behavioral details: internal call to football_find_value_bets, selection of strongest legs, return of risk_flag and independence_warning. No contradictions.

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?

Description includes docstring with Args and Returns blocks. Some redundancy with param descriptions, but overall well-structured and informative. Could be slightly more concise.

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?

Given the tool's complexity (joint probability model, internal call), the description covers purpose, workflow, parameters, and return fields. Output schema exists, and the description complements it.

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?

Schema coverage is 100% with descriptions and defaults. The description repeats param info but adds context on how they are used (selects strongest legs based on edge), providing marginal added value.

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 clearly states the tool models joint probability of match outcomes using top model-vs-market gaps, calls an internal function, selects strongest legs, and combines them. It distinguishes from siblings like cross_sport_build_accumulator and cricket tools.

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 description explains the internal workflow and parameters (legs, min_edge). It implies usage for building accumulators from value bets but does not explicitly state when to use vs. alternatives or when not to use.

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

football_find_value_betsA
Read-onlyIdempotent
Inspect

Surface the largest gaps between the model's win probability and the market.

De-vigs each market's 1X2 decimal odds (removes the margin so implied probabilities sum to 1) and compares them to this server's own match-outcome probabilities — the same Elo/Poisson path football_match_predictor uses. Where the model probability exceeds the de-vigged market probability by at least min_edge, the outcome is flagged with its edge and the model's fair odds.

Args: team: Optional team name to filter events (case-insensitive substring, matched against both sides). Omit to scan every WC 2026 odds event. min_edge: Minimum edge (model_prob - devigged_market_prob), 0..1. Default 0.05 (5 percentage points).

Returns: data.value_bets: list of {event_id, home, away, outcome, model_prob, fair_odds, market_odds, edge, bookmaker}, sorted by edge descending. data.events_analysed: events with both teams rated (model-comparable). meta.estimated: true. meta.is_stale reflects the odds freshness.

ParametersJSON Schema
NameRequiredDescriptionDefault
teamNoOptional team name to filter events (case-insensitive substring, matched against both sides). Omit to scan every WC 2026 odds event.
min_edgeNoMinimum edge (model_prob - devigged_market_prob), 0..1. Default 0.05 (5 percentage points).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint, idempotentHint, and destructiveHint. Description adds details about de-vigging process, comparison to model probabilities, sorting by edge, and freshness indicator (meta.is_stale). No contradictions.

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?

Description is well-structured with purpose, methodology, args, and returns. Slightly verbose but front-loaded with main purpose. Could be more concise, but effective.

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?

Given complexity of value bet detection, description covers methodology, de-vigging, comparison, and output format. Output schema exists, so return values are detailed. Context about WC 2026 odds is provided.

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?

Schema coverage is 100%, so baseline 3. Description adds meaning beyond schema: 'team' is case-insensitive substring matched against both sides, 'min_edge' clarified as range 0..1 with default 0.05.

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?

Description clearly states 'Surface the largest gaps between the model's win probability and the market.' It explains de-vigging and comparison to model probabilities, and distinguishes from sibling 'football_match_predictor' by noting it uses the same underlying model.

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?

Description explains when to use (when model probability exceeds market probability by min_edge) and provides default thresholds. It does not explicitly state when not to use, but sibling tools like 'football_build_accumulator' and 'football_match_predictor' indicate alternative contexts.

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

football_get_fixturesA
Read-onlyIdempotent
Inspect

Return World Cup 2026 fixtures (live providers, else the group schedule).

Args: limit: Max fixtures to return, 1..200 (default 50). offset: Number of fixtures to skip for paging (default 0).

Returns: data.fixtures: page of {home, away, date/group, status, home_goals, away_goals}. data.pagination: {total, count, offset, limit, has_more, next_offset}. meta.source: adapter that served the data (static_seed = group schedule only).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax fixtures to return, 1..200 (default 50).
offsetNoNumber of fixtures to skip for paging (default 0).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already indicate a safe, read-only operation. The description adds useful behavioral context, such as fallback to group schedule when live providers are unavailable and return structure details.

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

Conciseness3/5

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

The description includes separate Args and Returns sections, making it structured but slightly verbose. It could be more concise while retaining key 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?

Given the annotations and output schema presence, the description adequately covers parameters, pagination, and data source behavior. It is largely complete for understanding the tool.

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 description essentially repeats the parameter meaning. No additional semantic value beyond the schema is provided.

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 clearly states the tool returns World Cup 2026 fixtures, specifying the data source (live providers or group schedule). This is distinct from sibling tools like football_get_groups or football_get_match_stats.

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 does not explicitly mention when to use this tool over alternatives or provide exclusion criteria. Usage is implied but not guided.

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

football_get_groupsA
Read-onlyIdempotent
Inspect

Return the FIFA World Cup 2026 group draw and advancement format.

Returns: data.groups: {group_letter: [4 team codes]} for all 12 groups. data.format: 48-team / 12-group / top-2 + 8-best-thirds rule. data.teams: team-code -> {name, fifa_code} metadata. meta.source: adapter that served the data.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false. The description adds significant behavioral context by detailing the return structure (groups, format, teams metadata, source), which goes beyond the annotations.

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 extremely concise with only a few lines, front-loading the main purpose and using bullet points for clarity. Every sentence is informative, with no wasted words.

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?

Given the tool has no parameters and an output schema exists, the description thoroughly explains the returned data: groups, format, teams metadata, and source. It is complete for a static data retrieval tool and matches the complexity.

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 no parameters, so schema coverage is effectively 100%. According to the rubric, 0 parameters yields a baseline of 4. The description adds value by explaining the output structure rather than parameters.

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 explicitly states 'Return the FIFA World Cup 2026 group draw and advancement format', clearly identifying the tool's specific verb and resource. It distinguishes itself from sibling football tools like football_get_fixtures and football_get_standings by focusing solely on group draw and advancement format.

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 does not provide any guidance on when to use this tool versus alternatives such as football_get_standings or football_get_fixtures. It lacks explicit context or exclusions that would help an agent decide when this tool is appropriate.

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

football_get_match_statsA
Read-onlyIdempotent
Inspect

Return a team's aggregate World Cup tournament statistics.

Network-only enrichment: requires a configured API-Football (or football-data.org) key. There is no offline static fallback, so without a key the call returns a clean ALL_SOURCES_FAILED envelope.

Args: team: API-Football numeric team id (not a country code).

Returns: data.team_stats: {team, played, wins, goals_for, goals_against}. meta.source: adapter that served the data.

ParametersJSON Schema
NameRequiredDescriptionDefault
teamYesAPI-Football numeric team id (not a country code).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4/5.0
Behavior4/5

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

Beyond annotations (readOnlyHint, idempotentHint), the description adds important behavioral details: requires network, no offline fallback, returns ALL_SOURCES_FAILED without key, and explains return structure.

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 mostly concise with clear structure (overview, operational note, Args/Returns), though there is slight redundancy in parameter description.

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 simple tool with one parameter and annotations present, the description is complete: it covers purpose, prerequisites, failure behavior, and return structure (including output schema details).

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 description repeats the parameter meaning verbatim, adding no new information beyond the schema.

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 clearly states the tool returns a team's aggregate World Cup tournament statistics, specifying verb, resource, and scope. It distinguishes from sibling tools like football_get_standings or football_get_fixtures.

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 mentions network-only enrichment and the requirement of an API key, but does not explicitly compare to other tools or provide when-to-use vs alternatives.

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

football_get_oddsA
Read-onlyIdempotent
Inspect

Return live market head-to-head odds for upcoming World Cup 2026 matches.

Sourced from The Odds API (requires THEODDS_KEY). Without a key the call returns a clean ALL_SOURCES_FAILED envelope rather than crashing.

Args: team: Optional team name to filter events (case-insensitive substring, matched against both sides). Omit to return every WC event.

Returns: data.events: list of {event_id, home, away, commence_time, bookmakers: [{name, home, draw, away}]} with decimal 1X2 prices per bookmaker. meta.source: adapter that served the data (theodds / cache:stale).

ParametersJSON Schema
NameRequiredDescriptionDefault
teamNoOptional team name to filter events (case-insensitive substring, matched against both sides). Omit to return every WC event.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds significant context: the data source (The Odds API), graceful degradation ('ALL_SOURCES_FAILED envelope' instead of crash), and output metadata (e.g., cache:stale adapter). This goes beyond what annotations provide.

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 well-structured: purpose, source/prerequisite, parameter section, and return format. It is concise (4 sentences plus list). However, the parameter description duplicates the schema verbatim, slightly reducing efficiency. The Returns section compensates by describing output structure.

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 tool with one optional parameter, rich annotations, and an output schema (not shown but referenced), the description covers purpose, source, error handling, parameter semantics, and output structure. It does not discuss rate limits or pagination, but these are presumably handled by the output schema and annotations.

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% because the single parameter (team) has a full description in the input schema. The tool description repeats exactly the same text, adding no new semantic information. At baseline 3, no extra value is provided.

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 uses a specific verb ('Return') and identifies the resource ('live market head-to-head odds for upcoming World Cup 2026 matches'). This clearly differentiates it from sibling tools like football_find_value_bets (value bet identification) or football_build_accumulator (accumulator building).

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 mentions the requirement of a THEODDS_KEY and the graceful failure without it, which is useful. However, it does not explicitly guide when to use this tool versus siblings (e.g., raw odds vs. value bets) or provide when-not-to-use scenarios. The scope is limited to World Cup 2026, but no alternatives are suggested.

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

football_get_squadA
Read-onlyIdempotent
Inspect

Return a national team's World Cup squad.

Args: team: Team code or name (e.g. "ARG"). Without an API-Football key, the static seed serves an empty-but-valid squad (rosters are a follow-up).

Returns: data.squad: list of {name, number, position, age}. meta.source: adapter that served the data.

ParametersJSON Schema
NameRequiredDescriptionDefault
teamYesTeam code or name (e.g. "ARG"). Without an API-Football key, the static seed serves an empty-but-valid squad (rosters are a follow-up).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations indicate read-only, idempotent, non-destructive behavior. The description adds critical context about the static seed serving an empty-but-valid squad when no API key is available, and outlines the return format. This goes beyond annotations to disclose key behavioral traits.

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

Conciseness5/5

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

The description is concise at 5 lines, with clear 'Args' and 'Returns' structure. Every sentence contributes meaning without redundancy.

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?

The tool is simple with one parameter and a well-described output structure. The description covers purpose, parameter, fallback behavior, and return format completely, leaving no gaps for the agent.

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?

Schema coverage is 100% and the parameter description is repeated, but the tool description adds nuance by explaining the fallback behavior when no API key is provided. This adds value beyond the schema alone.

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 clearly states the verb 'Return' and the resource 'a national team's World Cup squad'. It distinguishes itself from sibling tools as the only football squad-getting tool, and the specification of 'World Cup' narrows scope appropriately.

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 usage for retrieving a national team's World Cup squad but does not explicitly state when to use this tool versus alternatives or mention any exclusions. No guidance is provided on scenarios where this tool should not be used.

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

football_get_standingsA
Read-onlyIdempotent
Inspect

Return current World Cup 2026 group standings.

Args: limit: Max standing rows to return, 1..200 (default 50). offset: Number of rows to skip for paging (default 0).

Returns: data.standings: page of {rank, team, group, points, played, goals_diff}. data.pagination: {total, count, offset, limit, has_more, next_offset}. meta.source: adapter that served the data.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax standing rows to return, 1..200 (default 50).
offsetNoNumber of rows to skip for paging (default 0).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds behavioral context about pagination, return structure (standings and pagination fields), and the meta source, enhancing transparency beyond annotations.

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 concise and well-structured with clear Args and Returns sections. Every sentence serves a purpose without redundancy.

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?

Given the tool's simplicity, the description covers key aspects: purpose, parameters, pagination, and return fields. Missing edge cases like empty results, but overall complete for a read-only paged 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 coverage is 100%, and the description repeats the same parameter info. While the description adds value by explaining the return structure, it does not add new meaning to the parameters themselves, so 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?

The description clearly states 'Return current World Cup 2026 group standings,' using a specific verb and resource. It effectively distinguishes the tool from siblings like football_get_fixtures and football_get_squad.

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 does not explicitly state when to use this tool versus alternatives, such as other standings tools or filtering by league. Usage context is implied, but no when-not-to-use or alternative guidance is provided.

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

football_get_top_scorersA
Read-onlyIdempotent
Inspect

Return the World Cup 2026 top scorers.

Returns: data.scorers: list of {name, team, goals, assists}. meta.source: adapter that served the data.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint, openWorldHint, idempotentHint, and no destructiveness. The description adds the specific tournament and return structure but does not disclose additional behavioral traits beyond what annotations provide.

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 extremely concise with two bullet points stating purpose and return structure. Every sentence adds value, and it is front-loaded with the main action.

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 parameterless, read-only tool with an output schema, the description is mostly complete. It could clarify whether it covers men's or women's World Cup, but the specificity is sufficient for typical use.

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 the baseline is 4. The description does not need to explain parameters; it implicitly covers the input schema by stating the tool returns data without parameters.

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 clearly states it returns World Cup 2026 top scorers, with specific fields like name, team, goals, assists. This distinguishes it from sibling tools that cover different sports or football aspects (e.g., standings, fixtures).

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 the tool name and description, but there is no explicit guidance on when to use this versus alternatives like football_get_standings or football_match_predictor. Agents must infer the context.

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

football_knockout_pathA
Read-onlyIdempotent
Inspect

Round-by-round survival probabilities for one team in the full sim.

Args: team: Team code (e.g. "FRA"). iterations: Number of tournament simulations (clamped to 100..20000). seed: Optional RNG seed.

Returns: data: {team, reach_r32, reach_r16, reach_qf, reach_sf, reach_final, win}. meta.estimated: true.

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoOptional RNG seed.
teamYesTeam code (e.g. "FRA").
iterationsNoNumber of tournament simulations (clamped to 100..20000).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations declare readOnlyHint, idempotentHint, and non-destructive, and the description adds context: the tool uses simulation, returns probabilities, and notes meta.estimated: true. It also explains the output structure (reach_r32, etc.) and parameter clamping, going beyond the annotation cues.

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 compact with a clear Args/Returns structure, around 5 lines. It avoids excessive verbosity, though the Args section largely duplicates schema info. Slightly more conciseness could be achieved, but it is generally well-structured.

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?

Given the tool has an output schema (not displayed) and 100% schema coverage, the description adequately explains the output fields (team, reach_r32, etc.) and the simulation clamp. It does not cover simulation assumptions or error handling, but for a read-only tool with good annotations, it is sufficiently 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 coverage is 100%, so baseline is 3. The description repeats parameter descriptions from the schema without adding new meaning (e.g., 'clamped to 100..20000' already in schema). No additional semantics or usage examples are given.

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 clearly states the tool computes 'Round-by-round survival probabilities for one team in the full sim,' specifying the verb (survival probabilities) and resource (one team in a tournament). This distinguishes it from siblings like football_simulate_bracket (entire bracket) and football_match_predictor (match outcome).

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 for a single team's knockout path, but it does not explicitly state when to use this tool versus alternatives such as football_simulate_bracket or football_match_predictor. No direct usage guidance 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.

football_match_predictorA
Read-onlyIdempotent
Inspect

Predict a single match: most likely scoreline + outcome probabilities.

Args: home_team: First team code. away_team: Second team code. neutral: True for a neutral venue (World Cup default).

Returns: data: {most_likely_score, home_win, draw, away_win, predicted_winner}. meta.estimated: true.

ParametersJSON Schema
NameRequiredDescriptionDefault
neutralNoTrue for a neutral venue (World Cup default).
away_teamYesSecond team code.
home_teamYesFirst team code.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint, openWorldHint, idempotentHint, and non-destructive. The description adds return structure (most_likely_score, probabilities) and meta.estimated, but no additional behavioral traits beyond schema and annotations.

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-sentence summary plus structured Args and Returns. Every word serves a purpose. No redundancy. Efficient and easy to parse.

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?

Given the tool's moderate complexity, annotations covering safety, and existence of an output schema (not shown but noted), the description sufficiently covers inputs and outputs. Could optionally add more about usage context (e.g., only works for certain leagues) but adequate.

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%, so baseline 3. Description repeats parameter descriptions from schema (home_team: first team code, away_team: second team code, neutral: True for neutral venue). Adds 'World Cup default' but no further semantic enrichment.

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?

Clearly states the tool predicts a single match with most likely scoreline and outcome probabilities. Distinguishes from sibling football tools that focus on betting, stats, or squad info, making its purpose unique.

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?

Explicitly says 'Predict a single match', implying it's for individual match predictions. Mentions neutral venue context for World Cup. Lacks explicit 'when not to use' or comparisons to siblings like football_xg_model, but overall clear.

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

football_simulate_bracketA
Read-onlyIdempotent
Inspect

Monte Carlo the full World Cup 2026 — per-team round + title probabilities.

Simulates all 12 groups, advances the top 2 + 8 best third-placed teams to a 32-team knockout, and plays it to a champion, iterations times.

Args: iterations: Number of tournament simulations (clamped to 100..20000; ~10000 gives stable ±2% probabilities). seed: Optional RNG seed for reproducible output.

Returns: data.teams: {code: {reach_r32, reach_r16, reach_qf, reach_sf, reach_final, win}} sorted by win probability descending. data.champion: most likely winner. data.iterations: iterations run. meta.estimated: true. meta.conditioned_matches: completed matches locked in (played group results fixed, decided knockout ties locked).

Example: football_simulate_bracket() football_simulate_bracket(iterations=20000, seed=42)

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoOptional RNG seed for reproducible output.
iterationsNoNumber of tournament simulations (clamped to 100..20000; ~10000 gives stable ±2% probabilities).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations indicate readOnlyHint, openWorldHint, idempotentHint, and non-destructive. The description adds extensive behavioral context: it simulates 12 groups, advances top 2 + 8 best third-placed teams to knockout, and plays to a champion. It also details clamping, seed use, and output structure, exceeding annotation coverage.

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 concise, front-loaded with a clear summary, followed by structured details (Args, Returns, Example). Every sentence adds value without redundancy.

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?

Given the tool's complexity and the existence of an output schema, the description fully explains the simulation scope, input parameters, output structure, and provides an example. It also notes that completed matches are locked, covering edge cases.

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?

Schema coverage is 100%. The description adds value by explaining the iteration clamping range and that ~10000 gives stable ±2% probabilities. For seed, it repeats the schema description. This additional context justifies a score above baseline 3.

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 clearly states the tool performs Monte Carlo simulation of the full World Cup 2026 bracket, computing per-team round and title probabilities. It distinguishes from sibling tools like football_simulate_group by focusing on the entire tournament.

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 description explains when to use the tool (to simulate the full bracket) and provides usage details like iteration clamping and recommended values for stability. It does not explicitly state when not to use it or list alternatives, but the context of sibling tools implies its specific role.

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

football_simulate_groupA
Read-onlyIdempotent
Inspect

Monte Carlo one group's round-robin -> per-team qualification probabilities.

Args: group: Group letter A-L. iterations: Number of simulations (clamped to 100..20000).

Returns: data.teams: {code: {p_first, p_second, p_third, p_fourth, p_advance, avg_points}}. data.iterations: iterations actually run. meta.estimated: true. meta.conditioned_matches: completed matches locked in.

ParametersJSON Schema
NameRequiredDescriptionDefault
groupYesGroup letter A-L.
iterationsNoNumber of simulations (clamped to 100..20000).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate read-only, open-world, idempotent, non-destructive. Description adds that it runs Monte Carlo simulations, clamps iterations, and returns estimated probabilities with conditioned matches locked in. This goes beyond annotations by explaining the algorithm and 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?

Description is very concise (two paragraphs plus a bulleted return list). Front-loaded with the main purpose. No wasted words or redundancy.

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?

Given the output schema exists (not shown but referenced), the description adequately explains the return structure. It covers inputs, behavior, and outputs. Could mention default iteration value explicitly in the description text, but it's in the schema.

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% with both parameters described. The description replicates the schema's arg descriptions ('group: Group letter A-L.', 'iterations: Number of simulations (clamped to 100..20000).'). No additional semantic value beyond schema.

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?

Purpose is clear and specific: 'Monte Carlo one group's round-robin -> per-team qualification probabilities.' It uses a specific verb ('simulate'), resource ('group'), and outcome (qualification probabilities). Distinguishes from siblings like football_simulate_bracket.

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 the tool name and description (for group stage simulation), but no explicit guidance on when to use it vs alternatives like football_simulate_bracket or football_match_predictor. No 'when not to use' or prerequisites mentioned.

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

football_xg_modelA
Read-onlyIdempotent
Inspect

Estimate a match's expected goals and win/draw/loss probabilities.

Args: home_team: First team code (e.g. "ARG"). away_team: Second team code (e.g. "BRA"). neutral: True for a neutral venue (no home advantage). World Cup default.

Returns: data: {expected_home_goals, expected_away_goals, home_win, draw, away_win}. meta.estimated: true.

ParametersJSON Schema
NameRequiredDescriptionDefault
neutralNoTrue for a neutral venue (no home advantage). World Cup default.
away_teamYesSecond team code (e.g. "BRA").
home_teamYesFirst team code (e.g. "ARG").

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already provide readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, so the safety profile is clear. The description adds useful context about the return values (expected_home_goals, expected_away_goals, probabilities) and that meta.estimated is true. No contradictions.

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 concise (two lines plus Args/Returns), front-loaded with the main purpose. Every sentence contributes value. No wasted words.

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?

Given the tool has 3 parameters (2 required, 1 optional with default), a rich annotation set, and an output schema, the description fully covers what the tool does and returns. It is complete for an xG model estimation tool.

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 schema already documents all parameters. The description repeats the parameter names with examples, but adds no additional meaning beyond what the schema provides. 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?

The description uses a specific verb 'Estimate' and clearly identifies the resource: expected goals and win/draw/loss probabilities. It also provides a clear return structure. Among siblings like football_match_predictor, this tool is distinct as it focuses on xG model output.

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 usage through the Args section (home_team, away_team, neutral), but does not explicitly state when to use this tool versus alternatives like football_match_predictor or football_simulate_group. The context is implied but not clearly differentiated.

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

sportiq_healthA
Read-onlyIdempotent
Inspect

Report cache backend, per-adapter healthcheck, and quota status.

Returns: HealthReport-shaped dict with cache_backend, cache_ok, adapters (per-source ok/detail), and quotas.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
errorNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare the tool as read-only, non-destructive, and idempotent. The description adds valuable behavioral context by detailing the return shape (cache_backend, cache_ok, adapters, quotas), which is beyond what annotations provide.

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 very concise: two sentences that fully convey the purpose and return structure. No wasted words; front-loaded with the key action and resource.

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?

Given no parameters and an existing output schema, the description completely covers the tool's behavior. It explains the return shape sufficiently without needing to duplicate schema details.

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?

No parameters exist, so the baseline is 4. The description adds no parameter information because none is needed; schema coverage is 100% by default.

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 clearly states the tool reports cache backend, per-adapter healthcheck, and quota status. The verb 'Report' and specific resources distinguish it from sibling tools which focus on sports data actions like building teams or getting match details.

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 description implicitly indicates this tool is for health and quota status checking. While it does not explicitly state when-not-to-use or provide alternatives, the context of sibling sports tools makes the use case clear.

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. Dates show when Glama detected each change.

  1. 44 tool updatesv0.3.1
    • First observedcricket_build_dream11_team
    • First observedcricket_captain_recommendation
    • First observedcricket_differential_picks
    • First observedcricket_find_value_bets
    • First observedcricket_get_live_matches
    • First observedcricket_get_live_odds
    • First observedcricket_get_pitch_report
    • First observedcricket_get_points_table
    • First observedcricket_get_schedule
    • First observedcricket_get_scorecard
    • First observedcricket_get_squad
    • First observedcricket_head_to_head
    • First observedcricket_player_form_index
    • First observedcricket_player_matchup
    • First observedcross_sport_build_accumulator
    • First observedf1_get_drivers
    • First observedf1_get_lap_times
    • First observedf1_get_race_results
    • First observedf1_get_sessions
    • First observedf1_get_standings
    • First observedf1_get_weather
    • First observedf1_head_to_head_pace
    • First observedf1_predict_pit_strategy
    • First observedf1_qualifying_analysis
    • First observedf1_race_pace_compare
    • First observedf1_tyre_degradation
    • First observedf1_undercut_window
    • First observedf1_weather_strategy_impact
    • First observedfootball_build_accumulator
    • First observedfootball_find_value_bets
    • First observedfootball_form_trends
    • First observedfootball_get_fixtures
    • First observedfootball_get_groups
    • First observedfootball_get_match_stats
    • First observedfootball_get_odds
    • First observedfootball_get_squad
    • First observedfootball_get_standings
    • First observedfootball_get_top_scorers
    • First observedfootball_knockout_path
    • First observedfootball_match_predictor
    • First observedfootball_simulate_bracket
    • First observedfootball_simulate_group
    • First observedfootball_xg_model
    • First observedsportiq_health

TDQS

A4.2/5.0
Disambiguation5/5

Each tool targets a specific function within its sport (e.g., fantasy team building, live odds, match prediction, driver analysis). Despite the large number, descriptions clearly differentiate purposes, and no two tools appear to do the same thing.

Naming Consistency5/5

All tools follow a consistent snake_case pattern with a sport prefix (e.g., cricket_build_dream11_team, f1_get_drivers, football_find_value_bets). Verb_noun structure is maintained throughout, making the naming predictable.

Tool Count4/5

With 44 tools across three sports plus cross-sport functionality, the count is slightly high but justified by the breadth of coverage. The scope is well-defined for a multi-sport analytics server, and each tool serves a distinct purpose without overwhelming redundancy.

Completeness5/5

The tool set covers the major aspects of each sport: cricket (fantasy, odds, match data, player stats), F1 (drivers, sessions, race analysis, weather, strategy), and football (match prediction, tournament simulation, odds, standings). No obvious gaps are present for the stated domain.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    MCP server for FIFA World Cup 2026 data: matches, teams, venues, city guides, fan zones, visa info, injuries, odds, standings, bracket, and historical matchups. 18 tools, zero external API dependencies.
    18
    529
    34
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    17 decision intelligence algorithms as MCP tools for AI agents. Bandits (UCB1, Thompson), LP/MIP solver (HiGHS), Monte Carlo simulation, Bayesian inference, graph analytics (PageRank, Louvain), genetic algorithms, CMA-ES, anomaly detection, time series forecasting, and more. All under 25ms, deterministic, zero LLM cost.
    17
    13
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Remote MCP server for prediction markets — search and compare live odds across Polymarket, Kalshi, and Limitless from Claude, ChatGPT, or Gemini. Six read-only tools, free tier available.
    6
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Ninjabeam20/SportIQ-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server